打印

STM32/GD32 96位唯一ID自动加密

[复制链接]
2295|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
god9987|  楼主 | 2017-8-26 20:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
god9987|  楼主 | 2017-8-26 20:59 | 只看该作者
编译软件:KEIL

使用特权

评论回复
板凳
god9987|  楼主 | 2017-8-26 20:59 | 只看该作者
1、在指定FLASH地址中写入0xFFFFFFFF,以保证该地址内容在第一次烧写时为0xFFFFFFFF
const uint32_t Test_Addr __attribute__((at(0x08000800)))=0xFFFFFFFF;//在该地址写入0xFFFFFFFF
                                                                   //保证第一次上电能够直接写入数据

使用特权

评论回复
地板
god9987|  楼主 | 2017-8-26 21:00 | 只看该作者
2、读取UID号,判断Test_Addr内容是否为0xFFFFFFFF,即判断程序是否第一次运行,如果是,那么,把ID号写入该地址,当然,要想达到更好的加密效果,自己可以做一些算法,把算法结果写到该地址。

使用特权

评论回复
5
god9987|  楼主 | 2017-8-26 21:00 | 只看该作者
3、当程序运行过一次后,即在指定地址已经写下了UID或者加密算法结果,那么,如果第二步中Test_Addr地址内容不为0xFFFFFFFF时,就判断Test_Addr地址内容是否为UID号(如果有使用算法,就判断算法结果是否与该地址内容一致),是则运行,否则不运行。

使用特权

评论回复
6
god9987|  楼主 | 2017-8-26 21:00 | 只看该作者
如果有人使用工具读出FLASH内容时,因为Test_Addr,已经在第一次上电已被写入自身UID号或者经过算法的结果,所以如果把读出的文件再烧到其他芯片,其他芯片会直接执行第3步,这样Test_Addr内容为上一个芯片的UID号或者算法结果,与烧进来的这个芯片不一致,所以就不运行。

使用特权

评论回复
7
god9987|  楼主 | 2017-8-26 21:01 | 只看该作者
到此为止,只需要三步,就可以实现程序自动加密,无须任何软件工具干预。

使用特权

评论回复
8
god9987|  楼主 | 2017-8-26 21:02 | 只看该作者
效果很好

使用特权

评论回复
9
stm32lover| | 2017-8-26 21:36 | 只看该作者
没用过,试试看

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

1028

帖子

0

粉丝