IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MCU非唯一ID加密 -> 正文阅读

[嵌入式]MCU非唯一ID加密

以下介绍一种不增加成本,在软件方面下功夫,适用于防止其他人去读取代码,以下为具体代码:

#define GD32_ID_D 352520 // 任意的一个数
volatile u32 GD32_ID_addr[3]={0x1ffff7e8 - GD32_ID_D,0x1ffff7ec + GD32_ID_D,0x1ffff7f0 - GD32_ID_D};
/********************************************************************
函数功能:读出ID
入口参数:para
返 回:
备 注:
********************************************************************/
volatile void GD32_Read_ID(volatile u32 *para)
{
volatile u32 Addr; //防止代码反汇编,所以此地址需要重新计算出来

Addr = GD32_ID_addr[0] + GD32_ID_D;
para[0] = (vu32)(Addr);
Addr = GD32_ID_addr[1] - GD32_ID_D;
para[1] = (vu32)(Addr);
Addr = GD32_ID_addr[2] + GD32_ID_D;
para[2] = (vu32)(Addr);
}
/********************************************************************
函数功能:加密ID并保存 加密和解密算法要一样
入口参数:
返 回:
备 注:
********************************************************************/
void GD32_Encrypted_ID(void)
{
u32 GD32ID[4],dat;
GD32_Read_ID(GD32ID);

GD32ID[3] = GD32_ID_D;
dat = GD32ID[0] + GD32ID[1] - (GD32ID[2]/GD32ID[3]);

FLASH_Unlock();
FLASH_ErasePage (GD32FLASH_EN_ID_START_ADDR); //
FLASH_ProgramWord(GD32FLASH_EN_ID_START_ADDR,dat); // 保存这个数,写进32位
FLASH_Lock();
}

/********************************************************************
函数功能:比较加密ID,正确返回0
入口参数:
返 回:1:错误,0:正确
备 注:
********************************************************************/
u32 GD32_COMPARE_KEY_ID(void)
{
u32 GD32ID[4],dat,dat2;
STM32_Read_ID(GD32ID);

GD32ID[3] = GD32_ID_D;
dat = GD32ID[0] + GD32ID[1] - (GD32ID[2]/GD32ID[3]);

dat2 = (u32)(GD32FLASH_EN_ID_START_ADDR);

if(dat == dat2){return 0;}
else {return 1;}
}

//=代码加密================//
if(GD32_COMPARE_KEY_ID())
{
//代码出厂设置对代码加密
if(初始化)
{
STM32_Encrypted_ID(); // 加密ID
}

//=正常运行时=============//

//平时代码重上电进行ID校验,可设置校验不正确后让设备的部分功能不正常
if(GD32_COMPARE_KEY_ID())
{

}else{ //校验正确

}

以上代码可以参照设计成两个bin,第一个bin用于加密文件,第二个用于解密,即第二个下载后可以将第一个覆盖,以上仅供参考;

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:17:19  更:2021-08-20 15:18:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:22:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码