嵌入式 > 技术百科 > 详情

STM8唯一ID号加密方法

发布时间:2023-12-15 发布时间:
|

1.读出ID号

#if defined(STM8S103)

#define ID_BaseAddress (0x4865)

#else// defined(STM8S105)

#define ID_BaseAddress (0x48CD)

#endif


void GetUniqueID(unsigned char *p)

{

unsigned char i;

unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);

for(i=0;i!=12;i++){*p++=*pIDStart++;}

}


2.把读出的ID号生成其他数据。不一定就是12字节的!并保存在内部EEPROM。在这个模块准备2个函数.一个用于加密.一个用于解密

void StmWriteUniqueID(unsigned char Addr)

{

unsigned char i;

FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);

unsigned char *pEE=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)Addr);

unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);


for(i=0;i!=6;i++)//由12字节生成12*N个字节

{

*pEE++=第1种算法,商业原因.我的算法就不公开了.大家可以准备一个数组查表

while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);

*pEE++=第2种算法,商业原因.我的算法就不公开了。大家可以准备一个数组查表

while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);

。。。。

第N种算法

}

}



//解密函数

unsigned char StmCheckUniqueID(unsigned char Addr)



3.主函数里面设置一个时间最好设置长一点。半个钟或其他,让人家难跟踪

while(1)

{

其他任务...............

/////////////////////////////////////////////////////////////////////////

if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)

{

Flag&=~FLAG_CHECK_ID;

if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正确写入

else{IsIDCorrect=0x00;}//错误写入

}

/////////////////////////////////////////////////////////////////////////

其他任务...............

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Intel Skylake新架构的秘密:逆超线程.单核猛增