【发布时间】:2015-10-14 19:02:25
【问题描述】:
我目前正在为“定制”嵌入式设备实施 SHA256 哈希算法。 显然我的消息填充有问题。 我编写的例程不适用于大小恰好等于 512 位的消息。
在这种情况下,应该如何填充消息? 即
M = "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP"
Z.
【问题讨论】:
标签: c++ cryptography hashcode sha
我目前正在为“定制”嵌入式设备实施 SHA256 哈希算法。 显然我的消息填充有问题。 我编写的例程不适用于大小恰好等于 512 位的消息。
在这种情况下,应该如何填充消息? 即
M = "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP"
Z.
【问题讨论】:
标签: c++ cryptography hashcode sha
即使它开始时正好是 512 位,您仍然需要填充消息。
FIPS 180-4, §5.1.1 解释如下:
假设消息的长度 M 为 L 位。将位“1”附加到消息的末尾,然后是 k 个零位,其中 k 是方程 L + 1+ k ≡ 448 mod 512 的最小非负解。然后附加等于用二进制表示的数字 L 的 64 位块。
[我用L 替换了一个显示不正确的字符]
【讨论】:
对于是块大小的精确倍数的数据,PKCS#7 填充表示您必须添加一个填充块,每个字节设置为填充字节数。在 AES 的情况下,块大小为 16 个字节,因此每个添加 16 个字节,值为 0x10。
注意:PHP mcrypt 不做 PKCS#7 填充,必须由用户代码完成。
【讨论】: