SHA256:填充512位长度的消息

SHA256: Padding a 512 bits length message

本文关键字:消息 512位 填充 SHA256      更新时间:2023-10-16

我目前正在为"定制"嵌入式设备实现SHA256哈希算法。显然,我有一个问题与消息填充。我编写的例程不适用于大小恰好等于512位的消息

在这种情况下,消息应该如何填充?例如

M = "AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPP"
z

即使它开始是512位,您仍然需要填充消息。

FIPS 180-4,§5.1.1解释如下:

假设消息M的长度为L位。将位"1"附加到消息的末尾,后面是k个零位,其中k是等式L + 1+ k≡448 mod 512的最小非负解。然后附加64位块,等于用二进制表示的数字L。

[我将L替换为不能正确显示的字符]

对于块大小的精确倍数pkcs# 7填充规定必须添加一个填充块,每个字节设置为填充字节数。在AES的情况下,块大小为16字节,因此每个块添加16字节,值为0x10。

参见pkcs# 7 padding

注意:PHP mcrypt不做pkcs# 7填充,必须由用户代码完成。