SHA256生成的文件和此文件的内容不同

时间:2019-06-06 07:28:46

标签: sha256

我使用在线SHA256转换器来计算给定文件的哈希值。在那里,我看到了我不了解的效果。

出于测试目的,我想为一个非常简单的文件计算哈希值。我将其命名为“ test.txt”,其唯一的内容是字符串“ abc”,后接新行(我刚刚按下Enter键)。

现在,当我将“ abc”和换行符放入SHA256生成器中时,我得到了哈希值

edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

但是当我将完整文件放入同一生成器时,我得到了哈希值

552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025

差异来自何处?我使用了这个生成器(实际上,我尝试了几个生成器,它们总是产生相同的结果):

https://emn178.github.io/online-tools/sha256_checksum.html

请注意,没有换行符不会出现这种不同。如果文件仅包含字符串“ abc”,则哈希为

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

用于文件以及内容。

3 个答案:

答案 0 :(得分:3)

正如我的评论中所指出的,差异是由于换行符在不同操作系统之间的表示方式所致(请参见详细信息here

  • 在UNIX和类似UNIX的系统上,换行符由换行符(\n)表示。
  • 在DOS和Windows系统上,换行符由回车符和换行符(\r\n)表示。

比较以下两个命令及其输出,它们与您问题中的SHA256值相对应:

echo -en "abc\n" | sha256sum
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

echo -en "abc\r\n" | sha256sum
552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025

答案 1 :(得分:2)

您遇到的问题可能来自新行的字符编码。 在Windows中,新行用\ r \ n转义,在Linux中用\ n转义。

这两个2的dec值不同(\ r为13,\ n为10)。

更多信息,请点击此处

https://en.wikipedia.org/wiki/Newline https://en.wikipedia.org/wiki/List_of_Unicode_characters

答案 2 :(得分:0)

即使我遇到同样的问题。但是以十六进制模式提供数据有助于了解实际行为。 enter image description here

在SHA计算之前需要对数据进行规范化,这将消除此类问题。规范化既需要在生成方进行,又需要在验证方进行。