C语言AES实现:字符数组异常修改与未用变量影响算法问题
简易AES实现问题排查思路
问题1:解密十六进制文本截断、ASCII转换错误
- 先核对解密后字节数组的长度,确认是否和原始明文字节数完全匹配。如果长度不一致,大概率是逆列混合、逆行移位等变换的循环边界写错,导致部分字节未被处理。
- 检查十六进制字符串生成逻辑:如果用固定缓冲区存储DecryptedText,务必确认缓冲区长度足够(每个字节对应2位十六进制)。473行截断很可能是缓冲区溢出,导致后续字符被覆盖或直接丢弃。
- 排查ASCII转换步骤:如果截断后的十六进制字符串长度为奇数,最后一个字节的十六进制不完整,转换时会出现非法映射或错误字符,转换前先验证字符串长度是否为偶数。
问题2:移除GaloisMult中rbits[8]后输出全错
- 别被“未使用”的表象误导,大概率是数组越界访问:如果GaloisMult里有循环到索引8的逻辑(比如
for循环条件写的是i<=8),移除rbits[8]后数组长度变为8,访问rbits[8]会读取到内存中随机值,直接破坏伽罗瓦乘法计算结果,进而导致整个加密解密流程彻底出错。 - 检查隐式依赖:部分编译器会做内存对齐优化,rbits[8]的存在可能刚好保证了数组的对齐要求,移除后相邻变量被意外修改;或者代码里有通过指针偏移访问的逻辑(比如
rbits + 8),移除后偏移地址直接错误。
代码检查提示
建议贴出GaloisMult函数的完整实现,以及解密后字节数组转十六进制字符串的代码片段,方便进一步定位具体问题。
内容的提问来源于stack exchange,提问作者Jaimin Vashi
相关产品推荐
相关产品推荐

