什么是sha-256填充?

时间:2014-06-12 11:22:34

标签: sha

研究了一位cpu矿工的源代码,我找到了这段代码:

work->data[20] = 0x80000000;

好吧,我问了关于它的编码,他的回答是:

“这些值是标准SHA-2填充的一部分”

谷歌搜索“沙2填充”没有帮助。你能告诉我这是为了什么吗?

我认为 md5 / sha256 函数只需获取数据并返回哈希值。

我不理解“填充”概念。

4 个答案:

答案 0 :(得分:3)

您可以在RFC 4634 -- SHA and HMAC-SHA第4.1节中找到它。引自第4部分的引言:

  

作为总结,在消息的末尾附加一个“1”后跟一些“0”,后跟一个64位或128位整数。

0x80000000是二进制的10000000000000000000000000000000。这是您的“1”,后跟一些“0”

原因是SHA​​-256通过将其分成固定大小的块来处理输入。最后一个块可能更小,因此它被扩展(填充)直到其大小与预期的块大小匹配。

答案 1 :(得分:1)

大多数现代加密哈希函数以固定长度块处理消息;除了最早的哈希函数之外的所有函数都包含某种填充方案。加密散列函数必须采用终止方案来防止散列容易受到长度扩展攻击。其余的可以在wiki

找到

用我自己的话解释:如果你想加密一个文本,算法会分成相同大小的块,如果你在最后一个块没有足够的数据,那么算法会增加0,直到它具有相同的值。与其他人一样大小。

答案 2 :(得分:1)

SHA-2哈希基于Merkle-Damgård scheme构建。这意味着散列函数基于单向压缩函数,该函数取n + r位输入并输出r位。因此,必须将输入划分为n位块,以便可以使用最后一轮的输出将压缩函数应用于每个块。

填充是必要的,使得输入可以被划分为n位块。特别是出于安全原因使用Merkle-Damgård compliant padding(有关详细信息,请参阅链接)。

答案 3 :(得分:0)

基本上,哈希算法需要特定的块大小(固定的字节数)才能使用。添加"填充"到消息的末尾使它到达下一个块字节的倍数。但是,您还需要知道实际消息的大小。通过向消息添加1位后跟足够的0位,您可以从消息末尾读回,直到您按下第一个1位,这就是消息的结束,因此您知道大小它