【发布时间】:2013-08-21 21:29:21
【问题描述】:
我一直在尝试在 IAR IDE 中用 C 语言在 Cortex M3 微控制器上实现 XTEA 加密, 到目前为止,加密解密正在工作,但我面临一个问题,我必须编码 Ascii 字符串,但加密字符串有时在字符串数组中包含一个 0x00,不是作为空终止符,而是在中间某处,所以字符串函数不由于这个额外的 0x00 他们假设它的 Null Terminator 得到正确的字符串长度,问题是我必须通过 GPRS 传输这个字符串,并且后端也使用相同类型的 ASCII 字符串,只在最后期望 0x00,在固件中也是字符串传输的其余部分假设它是空终止,有没有办法用其他值替换加密字符串中的这个 0x00,以某种方式它也可以稍后在后端轻松复制,假设我将 0x01 添加到每个加密字符串数组,这可能会使一个 0xff 变为 0x00 ,有没有办法去掉这个 0x00 ,
或任何其他简单的 Ascii 字符串加密算法,可在微控制器上轻松实现,保证加密字符串中的非零值,后端人员坚持在系统中使用一些算法,AES 算法是否确保非零值?
【问题讨论】:
-
AES 和其他加密算法具有随机输出,因此 0x00 字节可能与任何其他字节一样。
-
停止将您的加密数据视为文本字符串 - 不是,您应该将其视为字节数组(长度前缀而不是空分隔)。
-
@NickJohnson 所说的是这个问题的真正答案。如果您相信您的加密数据是 ASCII,那么您将遇到严重的问题。
标签: c algorithm encryption embedded logic