
我正在嘗試獲取字串的 md5 哈希值。所述字串僅由大寫和小寫字母和數字組成。沒有其他字符,包括空格和換行符。該字串是透過鍵盤輸入的,而不是檔案輸入,因此不存在 BOM 或其他標誌。
如果我使用本地運行,md5sum
我會得到以下輸出:
ubuntu@ubuntu:~$ echo word | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8 -
ubuntu@ubuntu:~$ echo "word" | md5sum
a46ec67a0f2e7c387926ac5d783ea4b8 -
ubuntu@ubuntu:~$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf -
我知道上面第二個和第三個輸出的差別是因為缺少換行符( 。 (事實證明不是!請參閱已接受的答案。)-n
)。這部分我很清楚
然而,有些工具可以給出第三種結果。所有非 CLI 工具似乎都提供相同結果,這就是讓我困惑的地方:
- http://www.miraclesalad.com/webtools/md5.php說是
c47d187067c6cf953245f128b5fde62a
。 - http://www.md5hashgenerator.com/說是
c47d187067c6cf953245f128b5fde62a
。 - http://www.md5.cz/說是
c47d187067c6cf953245f128b5fde62a
。 - http://www.md5online.org/md5-encrypt.html說是
c47d187067c6cf953245f128b5fde62a
。 - http://md5-hash-online.waraxe.us/說是
c47d187067c6cf953245f128b5fde62a
。 - 這個安卓應用程式說是
c47d187067c6cf953245f128b5fde62a
。 echo -n "word" | unix2dos | md5sum
給我c47d187067c6cf953245f128b5fde62a
。
這裡發生了什麼事?
答案1
$ echo "word" -n | md5sum
3a21ca21563e9535a9012daef61a0bdf -
$ echo "word -n" | md5sum
3a21ca21563e9535a9012daef61a0bdf -
$ echo "-n" word | md5sum
c47d187067c6cf953245f128b5fde62a -
具體來說,請注意:
$ echo "word" -n
word -n
所有選項必須位於非選項參數之前。除了一些 GNU 實用程式之外,大多數程式都是這種情況,並且echo
(echo
很特殊,因為大多數以 開頭的字串-
都被解釋為參數,只有少數選項被識別為參數) 的所有實現都是這種情況。