Shell-Script

為什麼 SHA 不匹配?

  • March 12, 2016

我正在嘗試編寫一個腳本,它使用日期的 SHA,但我得到了兩個不同的結果,而且我一生都無法弄清楚為什麼。

echo -n 03112016 | cut -d'.' -f4 | sha256sum | cut -d' ' -f 1
482c00f7db8419d9f9a151d54de301d73c8f688b2e3e91c485f369596543612e

date "+%m%d%Y" | tr -d '\n' | sha256sum | cut -d' ' -f 1
d373ab72ec7d92ee06ebba4748f78829cd62ce68f1ac600ae1767a272869b664

我知道這對我來說一定是愚蠢的,但我非常感謝任何幫助。

旨在對文本(例如catcutsorttail等)進行操作的 Shell 實用程序要求其輸入為文本文件。一個文本文件,在 Unix 術語中:

  • 僅包含環境語言環境(語言環境設置)中的有效字元LC_CTYPE,而不是空字節;
  • 由一系列行組成,每行都以換行符(\n,也稱為換行符)終止。

第二點意味著任何非空文件都以換行符結尾。

如果輸入不是文本文件會發生什麼取決於實用程序。舊的 Unix 系統傾向於忽略空字節後一行的文本,並忽略最後一個不完整行的全部或部分內容(最後一個換行符後的文本)。GNU 版本總是將空字節視為普通字元,並且大多通過無效字節序列。即使最後的換行符失去,GNU 版本也總是處理整個輸入,但它們在是否在輸出中添加尾隨換行符方面有所不同。例如,GNUcat總是將其輸入原封不動地傳遞,但許多其他的,包括cut,總是在每個輸出行的末尾列印一個換行符,包括最後一個。

因此,當您生成參考輸入時,您需要在最後一分鐘取消尾隨換行符。

echo 03112016 | cut -d'.' -f4 | tr -d '\n' | sha256sum

要不就

echo -n 03112016 | sha256sum

引用自:https://unix.stackexchange.com/questions/269234