【问题标题】:Why does writing to file change the content (hash)?为什么写入文件会更改内容(哈希)?
【发布时间】:2020-05-27 09:05:46
【问题描述】:

我注意到,在使用 vim 将它们复制粘贴到文件后尝试生成一些散列时,散列并不像预期的那样。打开并写出文件时相同。与 nano 相同的行为,所以一定有我遗漏的东西。

$ echo -n  "foo" | openssl dgst -sha256
2c26...e7ae
$ echo -n "foo" > hash.txt
$ openssl dgst -sha256 hash.txt
SHA256(hash.txt)= 2c26...e7ae

但是当我用 nano 或 vim 打开 hash.txt 并退出而不插入任何东西时,我随后得到以下哈希:b5bb...944c

我还注意到,在使用cathead 时,如果不打开文件并写出,我看不到输出。编码改了吗?

【问题讨论】:

  • 不知何故你在文件中插入了一个换行符。无论如何,我无法重现您的结果。
  • echo foo | openssl dgst -sha256 => b5bb…4944c。这与带有换行符的 foo 相同。

标签: vim hash echo nano


【解决方案1】:

大多数文本编辑器,包括 Vim,都会在您退出时以换行符保存文件。这是因为根据 POSIX,文本文件要么是空的,要么以换行符结尾,所以大多数用户期望并希望这种行为。

正如您所注意到的,在末尾添加换行符会更改哈希,并且您获得的哈希与序列foo\n 一致,其中\n 是换行符。

如果你有足够新的 Vim,你可以通过设置 nofixeol 来控制上面提到的行为,这将在最后一行保留现有的行结尾,或者缺少它。

【讨论】:

  • 我相信没有nofixeolnoeol 被记录为仅适用于binary
猜你喜欢
  • 2019-11-11
  • 2014-12-16
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2013-05-07
  • 1970-01-01
相关资源
最近更新 更多