sha256sum文件哈希值和直接哈希字符串的哈希值不一样

阅读量: searchstar 2020-04-23 12:09:08
Categories: Tags:

例如在文件test.txt里写入

test

没有换行。

然后

sha256sum test.txt

出来的结果是

f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2  test.txt

但是在这个网站上
http://encode.chahuo.com/
输入test,然后以sha256方式哈希得到的结果是

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

两者不一致。

stat test.txt
  文件:test.txt
  大小:5         	块:8          IO 块:4096   普通文件
设备:10301h/66305d	Inode:270564      硬链接:1
权限:(0644/-rw-r--r--)  Uid:( 1000/searchstar)   Gid:( 1000/searchstar)
最近访问:2020-04-23 11:53:08.989247877 +0800
最近更改:2020-04-23 11:53:03.077686032 +0800
最近改动:2020-04-23 11:53:03.077686032 +0800
创建时间:-

会发现大小为5字节,说明linux的文件中加上了其他东西。
hexdump来看看到底加上了什么。
在这里插入图片描述
居然是0x0a,也就是\n。为了验证,用vscode打开它看看
在这里插入图片描述
末尾果然多了个换行符。把它去掉,保存。
在这里插入图片描述
文件大小变回4字节了,而且sha256sum的输出也和网站一样了。

此外,还可以尝试让sha256sum直接从stdin中读入

sha256sum -

然后输入

test<EOF>

其中EOF在linux上一般是ctrl+d。
然后得到的结果就是

9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

与网站上的一致了。

为什么要自动加一个换行呢?

如果没有换行,那就会这样
在这里插入图片描述
自动加上了换行,就会这样
在这里插入图片描述

vim中禁用自动加换行

参考:https://stackoverflow.com/questions/1050640/vim-disable-automatic-newline-at-end-of-file
~/.vimrc中加入

set noeol
set nofixendofline

两个缺一不可,而且只有新建文件时才有用,打开已有文件时仍然不能显示出多加的那个空行。最气的是当没有最后的空行,然后又自己手动加一个,保存关闭再打开之后空行又不显示了。说好的Linux高自由度呢???

祭奠我逝去的一小时