STM32F4 ID簡(jiǎn)單加密
● 用來(lái)作為序列號(例如USB字符序列號或者其他的終端應用)
● 用來(lái)作為密碼,在編寫(xiě)閃存時(shí),將此唯一標識與軟件加解密算法結合使用,提高代碼在閃存存儲器內的安全性。
● 用來(lái)激活帶安全機制的自舉過(guò)程
96位的產(chǎn)品唯一身份標識所提供的參考號碼對任意一個(gè)STM32微控制器,在任何情況下都是唯一的。用戶(hù)在何種情況下,都不能修改這個(gè)身份標識。
這個(gè)96位的產(chǎn)品唯一身份標識,按照用戶(hù)不同的用法,可以以字節(8位)為單位讀取,也可以以半字(16位)或者全字(32位)讀取。
基地址:0x1FFF 7A10 ------stm32f4xx對應的,本文章基于F4的地址
(基地址:0x1FFF F7E8 ------stm32f1xx對應的)
每個(gè)CPU 出廠(chǎng)的時(shí)候都
配置的一個(gè)ID,96 位的.這個(gè)唯一碼可以利用作軟件加密.......
static u32 CpuID[3];
static u32 Lock_Code;
void GetLockCode(void)
{
//獲取CPU唯一ID
CpuID[0]=*(vu32*)(0x1fff7a10);
CpuID[1]=*(vu32*)(0x1fff7a14);
CpuID[2]=*(vu32*)(0x1fff7a18);
//加密算法,很簡(jiǎn)單的加密算法
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
}
然后再用上次所用的 FLASH_ProgramWord(LOCK_ADDR,Lock_Code); 寫(xiě)到FLASH 的某個(gè)角落就好了,然后再在程序中驗證這個(gè)值是否正確。感覺(jué)ID的調取很是方便倒是加密算法讓人頭痛,當然了要是把MD5移植過(guò)來(lái)應該不是太難。
評論