[研电赛技术支持] GD32F103之UID简单加密

[复制链接]
822|1
Zhiniaocun 发表于 2025-10-10 11:15 | 显示全部楼层 |阅读模式
一、GD32F103 UID简介
1.GD32F103系列微控制器内置96位唯一标识符(UID),存储在特定地址,可用于设备识别、加密或防复制。UID地址通常为:
◦ UID0: 0x1FFFF7E8
◦ UID1: 0x1FFFF7EC
◦ UID2: 0x1FFFF7F0
2.查GD32用户手册可得到地址:

1654668e87a42a6231.png

878368e87a35d1544.png

二、读取UID的方法

通过直接访问内存地址读取UID值:
uid[0] = *(uint32_t *)(GD32_UID_BASE_ADDR);     
uid[1] = *(uint32_t *)(GD32_UID_BASE_ADDR + 4);     
uid[2] = *(uint32_t *)(GD32_UID_BASE_ADDR + 8);


2.通过STM32 ST-LINK Utility测试,验证数据:

1107568e87a2eb60d8.png

3154268e87a27abfe6.png

三、基于UID的加密实现
将UID与用户密钥结合生成加密参数,常见方法包括异或运算或哈希算法。以下为简单异或加密示例:

encrypted_uid[0] = uid[0] ^ key;     
encrypted_uid[1] = uid[1] ^ (key >> 8);     
encrypted_uid[2] = uid[2] ^ (key >> 16);


四、简单的校验码生成算法:

checksum = uid[0] ^ uid[1] ^ uid[2];


五、主程序源代码:

#include "gd32f10x.h"
#include "gd32f103c_eval.h"
#include "systick.h"
#define GD32_UID_BASE_ADDR    0x1FFFF7E8
uint32_t Device_UID[3];//GD32F103RCT6唯一ID号
uint32_t uid[3];//GD32F103RCT6唯一ID号
uint32_t encrypted_uid[3];//异或加密算法
uint32_t*UniqueID=(uint32_t*)0x1FFFF7E8;//声明一个指针  指向设备原始地址
uint32_t UID_test;
// 加密密钥,可以根据需要修改
#define key  0x5A5A5A5A
int main(void)
{
        int i;
        systick_config();
        for (i = 0; i < 3; i++)
        {      
         Device_UID=UniqueID;
        }       
        // UID由3个32位数据组成     
        uid[0] = *(uint32_t *)(GD32_UID_BASE_ADDR);     
        uid[1] = *(uint32_t *)(GD32_UID_BASE_ADDR + 4);     
        uid[2] = *(uint32_t *)(GD32_UID_BASE_ADDR + 8);
        // 对每个32位的UID数据进行异或加密     
        encrypted_uid[0] = uid[0] ^ key;     
        encrypted_uid[1] = uid[1] ^ (key >> 8);     
        encrypted_uid[2] = uid[2] ^ (key >> 16);
// 解密过程与加密相同,因为异或操作是自反的     
//        decrypted_uid[0] = encrypted_uid[0] ^ key;     
//        decrypted_uid[1] = encrypted_uid[1] ^ (key >> 8);   
//        decrypted_uid[2] = encrypted_uid[2] ^ (key >> 16);
// 简单的校验码生成算法:异或所有UID数据     
//checksum = uid[0] ^ uid[1] ^ uid[2];
        while(1)
                {
                        UID_test++;
                        /* insert 200 ms delay */
                        delay_1ms(1000);
                }
}



————————————————
版权声明:本文为CSDN博主「兴园电子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36598085/article/details/151830387

tpgf 发表于 2025-10-13 11:33 | 显示全部楼层
UID可用于设备识别、加密或防复制等场景,是芯片的独特身份象征
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

286

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部