MD5 校驗與不一致

MD5 校驗與不一致

我正在嘗試獲取字串的 md5 哈希值。所述字串僅由大寫和小寫字母和數字組成。沒有其他字符,包括空格和換行符。該字串是透過鍵盤輸入的,而不是檔案輸入,因此不存在 BOM 或其他標誌。

如果我使用本地運行,md5sum我會得到以下輸出:

ubuntu@ubuntu:~$ echo word | md5sum 
a46ec67a0f2e7c387926ac5d783ea4b8 - 

ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8  - 

ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -

我知道上面第二個和第三個輸出的差別是因為缺少換行符( -n)。這部分我很清楚。 (事實證明不是!請參閱已接受的答案。)

然而,有些工具可以給出第三種結果。所有非 CLI 工具似乎都提供相同結果,這就是讓我困惑的地方:

這裡發生了什麼事?

答案1

$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf  -
$ echo "word -n" | md5sum
3a21ca21563e9535a9012daef61a0bdf  -
$ echo "-n" word | md5sum
c47d187067c6cf953245f128b5fde62a  -

具體來說,請注意:

$ echo "word" -n
word -n

所有選項必須位於非選項參數之前。除了一些 GNU 實用程式之外,大多數程式都是這種情況,並且echo(echo很特殊,因為大多數以 開頭的字串-都被解釋為參數,只有少數選項被識別為參數) 的所有實現都是這種情況。

相關內容