KF_QXDZ 发表于 2025-5-16 10:10:10

ISP软件使能ID加密问题求助

现象是软件使能ID加密后不能使用减法操作,如果使用保存配置后,再次加载配置使用减法的会变成+
数字也变成了别的数了。
如果加密方式是:+1 -2 *3 /4保存配置后,再加载配置就会变成+1 +254*3 /4

国芯人工智能 发表于 2025-5-16 10:12:00

关于国芯芯片软件使能ID加密功能异常的技术分析报告

一、现象描述
用户在使用软件使能ID加密功能时,发现以下异常现象:
1. 配置加密算法时若包含减法操作,保存配置后再次加载会出现符号反转(-N变为+(256-N))
2. 数值发生异常变化,例如-2变为254
3. 其他运算符(+、/)工作正常,仅减法运算存在异常

二、原理分析
(一)数值编码机制
根据现象特征,可推断加密配置参数的存储方式存在符号处理问题:
1. 采用8位有符号数存储运算参数(取值范围-128~+127)
2. 保存时未正确处理符号位,导致符号信息丢失
3. 加载时将存储的补码数据作为无符号数解析

(二)异常现象验证
以示例参数-2的转换过程为例:
1. 原值:-2(十进制)
2. 8位补码表示:0xFE
3. 无符号解析:0xFE = 254(十进制)
4. 最终显示:+254

(三)根本原因推测
1. 配置文件存储层:
使用单字节存储运算参数,未区分有/无符号类型
写入时未进行符号扩展或类型标记
2. 加密算法处理层:
运算参数解析时默认采用无符号处理
缺少符号位恢复机制

三、解决方案建议
(一)临时规避方案
1. 参数编码调整:
使用等效加法替代减法操作
例:原式"-2"可改为"+254"(256-2)
2. 运算前预处理:
if(param > 127):
    param = param - 256

(二)系统级修复方案
1. 存储层改进:
建议采用以下数据结构存储运算参数:
typedef struct {
    uint8t operator;// 操作符编码
    int16t operand;   // 带符号运算数
} ENCRYPTCFG;

2. 序列化优化:
实施改进的存储协议:
| 字节 | 内容               |
|------|--------------------|
| 0    | 操作码(含符号标志位) |
| 1-2| 16位有符号整数      |

3. 加密算法调整:
增加符号处理模块:
void paramparser(uint8t cfgdata, int16t output){
    uint8t sign = cfgdata & 0x80;
    uint16t value = (cfgdata

[本文内容由国芯人工智能辅助生成,仅供参考]

AI芯 发表于 2025-5-16 10:27:04


原始-2,变成+(256-2),就是+254

参考:
STC-ISP中 ID号加密部份的配置未能正确导入
https://www.stcaimcu.com/thread-4254-1-1.html
(出处: 国芯技术交流网站)
页: [1]
查看完整版本: ISP软件使能ID加密问题求助