我目前正在为一个"定制的"实现SHA256哈希算法。嵌入式设备。 显然我的消息填充有问题。 我编写的例程不适用于大小等于512位的消息。
在这种情况下,如何填充消息? 即。
M = "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP"
Ž。
答案 0 :(得分:3)
即使它始于512位,您仍然需要填充消息。
FIPS 180-4,§5.1.1解释如下:
假设消息的长度M是L位。将位“1”附加到消息的末尾,然后是k个零位,其中k是等式L + 1 +k≡448mod 512的最小非负解。然后附加64位块,该块等于使用二进制表示法表示的数字L.
[我用L
替换了没有正确显示的字符]
答案 1 :(得分:0)
对于块大小的精确倍数的数据PKCS#7填充表示必须添加一个填充块,每个字节设置为填充字节数。在AES的情况下,块大小为16字节,因此每个都添加16字节,值为0x10。
注意:PHP mcrypt不执行PKCS#7填充,必须由用户代码完成。