当前位置:网站首页 > 技术博客 > 正文

stm32f103程序加密



  1. //加密后的CPUID  

  2. volatile const static uint32 CPUIDEncrypt = 0xFFFFFFFF;  
    ( - ]8 N, X  m7 P+ J! {
  3.   

  4. //写入加密数据  
    ) I) S  N0 z' z
  5. void WriteEncrypt(void)  

  6. {
    $ w# g, ]+ `; d/ ~  q2 p
  7. //第一次烧写:将UID写入到Flash中  

  8. if(CPUIDEncrypt==0xFFFFFFFF)  

  9. {  

  10.       uint32_t CpuID[3];      

  11.       //获取CPU唯一的ID  
    7 B9 G( M3 E( n1 o7 A) e
  12.       CpuID[0]=*(vu32*)(UID_BASE);  

  13.       CpuID[1]=*(vu32*)(UID_BASE+4);  
    3 `% l, t( }1 `' X, W
  14.       CpuID[2]=*(vu32*)(UID_BASE+8);      

  15.   
    ) [' I. r) C( s+ Z4 y
  16.       //加密算法,很简单的加密算法  

  17.       uint32_t EncryptCode=(CpuID[0]>>3)+(CpuID[1]>>1)+(CpuID[2]>>2);    

  18.       FLASH_Unlock();  

  19.       FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);  
    ! B3 S/ r# v2 G2 g8 R! R
  20.       FLASH_ProgramWord((uint32_t)&CPUIDEncrypt, EncryptCode);  

  21.       FLASH_Lock();  
      g6 u0 I2 J& L# N, P6 k" ?
  22. }  
      H" r; j" [/ `
  23. }  

  24. //判断加密  

  25. bool JudgeEncrypt(void)  

  26. {      
    + d$ h+ D' x' v' C- i; R! {
  27. uint32_t CpuID[4];      
    & [% }" f* ^+ [) N
  28. //获取CPU唯一的ID  

  29. CpuID[0]=*(vu32*)(UID_BASE);  
    7 c& K! I9 D0 @8 {0 [- g' [6 E
  30. CpuID[1]=*(vu32*)(UID_BASE+4);  

  31. CpuID[2]=*(vu32*)(UID_BASE+8);   
    ) t: c9 A  s) s6 S' G
  32. //加密算法,很简单的加密算法  

  33. CpuID[3]=(CpuID[0]>>3)+(CpuID[1]>>1)+(CpuID[2]>>2);    
      w" L9 q5 ^# E# u$ d  f
  34. //检查Flash中的UID是否合法

  35. return (CPUIDEncrypt == CpuID[3]);  

  36. }

  • 上一篇: 中国电信武汉dns
  • 下一篇: 预测模型的种类
  • 版权声明


    相关文章:

  • 中国电信武汉dns2025-08-05 21:30:04
  • 驼峰命名的规则2025-08-05 21:30:04
  • linux 查看系统版本信息2025-08-05 21:30:04
  • java中构造器和构造方法2025-08-05 21:30:04
  • class1和class2区别2025-08-05 21:30:04
  • 预测模型的种类2025-08-05 21:30:04
  • svc指令2025-08-05 21:30:04
  • 二叉树的遍历算法2025-08-05 21:30:04
  • 抢福袋的软件2025-08-05 21:30:04
  • 背包一族2025-08-05 21:30:04