初级会员

- 积分
- 122
- 金钱
- 122
- 注册时间
- 2015-3-12
- 在线时间
- 13 小时
|

楼主 |
发表于 2016-9-27 09:43:56
|
显示全部楼层
STM32用ID加密
本帖最后由 nobita134 于 2016-9-27 09:45 编辑
先烧一遍程序将ID放到外部存储器flash 再烧一遍程序比对ID和FLASH中存储的是否一致
/这个是写ID
void lock_flash()
{
uint32_t CpuID[3],EncryptCode;
u8 data[3];
float code_h,code_mh,code_ml,code_l;
SPI_FLASH_SectorErase(4096*600);
//READ ID
CpuID[0]=*(vu32*)(0x1ffff7e8);
CpuID[1]=*(vu32*)(0x1ffff7e8+4);
CpuID[2]=*(vu32*)(0x1ffff7e8+8);
//
EncryptCode=(CpuID[0]>>3)+(CpuID[1]>>1)+(CpuID[2]>>2);
LCD_Num_8x16_OP(150,140,EncryptCode,ORG);
code_h=(float)(EncryptCode/16777215);
code_mh=(float)(EncryptCode%16777215/65535);
code_ml=(float)(EncryptCode%65535/255);
code_l=(float)(EncryptCode%255);
sprintf(data,"%3.0f",code_h);
SPI_FLASH_BufferWrite(data,4096*600,3);
sprintf(data,"%3.0f",code_mh);
SPI_FLASH_BufferWrite(data,4096*600+10,3);
sprintf(data,"%3.0f",code_ml);
SPI_FLASH_BufferWrite(data,4096*600+20,3);
sprintf(data,"%3.0f",code_l);
SPI_FLASH_BufferWrite(data,4096*600+30,3);
}
//这个读出来判断
u8 JudgeEncrypt(void)
{
uint32_t CpuID[4]={0},EncryptCode=0;
u8 data[3]={0};
float code_h,code_mh,code_ml,code_l,ID[4]={0};
SPI_FLASH_BufferRead(data,4096*600,3);
code_h=atof(data);
//LCD_Num_8x16_OP(50,200,code_h,0);
SPI_FLASH_BufferRead(data,4096*600+10,3);
code_mh=atof(data);
//LCD_Num_8x16_OP(50,220,code_mh,0);
SPI_FLASH_BufferRead(data,4096*600+20,3);
code_ml=atof(data);
//LCD_Num_8x16_OP(50,240,code_ml,0);
SPI_FLASH_BufferRead(data,4096*600+30,3);
code_l=atof(data);
//LCD_Num_8x16_OP(50,260,code_l,0);
CpuID[0]=*(vu32*)(0x1ffff7e8);
CpuID[1]=*(vu32*)(0x1ffff7e8+4);
CpuID[2]=*(vu32*)(0x1ffff7e8+8);
//
CpuID[3]=(CpuID[0]>>3)+(CpuID[1]>>1)+(CpuID[2]>>2);
//LCD_Num_8x16_OP(100,180,CpuID[3],ORG);
ID[0]=CpuID[3]/16777215;
ID[1]=CpuID[3]%16777215/65535;
ID[2]=CpuID[3]%65535/255;
ID[3]=CpuID[3]%255;
if((code_h==ID[0])&&(code_mh==ID[1])&&(code_ml==ID[2])&&(code_l==ID[3]))
{
return 1;
}
else
{
return 0;
}
} |
|