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

The*_*ern 5 sha256

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

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

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

edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

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

552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025

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

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

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

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

对于文件以及内容。

Rob*_*sen 4

正如我的评论中所述,差异是由不同操作系统中换行符的表示方式引起的(请参阅此处的详细信息):

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

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

echo -en "abc\n" | sha256sum
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

echo -en "abc\r\n" | sha256sum
552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025
Run Code Online (Sandbox Code Playgroud)