SHA-256 填充

问题描述 投票:0回答:2

为了计算 SHA-256 哈希值,我需要填充我的消息。我使用以下描述: (摘自 http://csrc.nist.gov/groups/STM/cavp/documents/shs/sha256-384-512.pdf

按照通常的方式填充消息:假设消息的长度M, 以位为单位,是l。将位“1”附加到消息末尾,然后 k 个零位,其中 k 是最小非负解 等式 l+1+k 448 mod 512。在此附加 64 位块,即 等于二进制数 l

但是,如果消息长度(以位为单位)小于 512 位块的 64 位……即没有空间容纳上面提到的最后 64 位块,该怎么办?或者64位长度和“1”位?

我也查看了维基百科,但这并没有对这个主题有更多的启发。谷歌搜索也没有太多成果,希望得到任何建议:)

谢谢

algorithm sha
2个回答
4
投票

如果您的消息仅缺少一个完整块(短于 65 位),则您将需要输出比输入长一个块。在最坏的情况下,如果您的消息正好比完整块少 64 位,则您将在“数字”位之前添加一个

1
,然后添加 511
0
,但这就是填充的工作方式。


0
投票

如果您以字节而不是位来实现 SHA-256,则可以在最后一个块的末尾填充字节

0x80
。我们使用
0x80
是因为在二进制中它给我们
0b10000000
,它与一位相同。之后,您只需用
0x00
填充其余字节,并将消息长度附加到最后一个块的最后 8 个字节处。因此,如果您的消息是
abc
,那么 3 个字节长,那么最后一个块的 8 个字节应该是(以 16 为基数):

00 00 00 00

00 00 00 18

© www.soinside.com 2019 - 2024. All rights reserved.