在 Arch Linux 中,如何使用指令行為密碼建立單一 md5 雜湊值?當然,我知道有可用的安全密碼雜湊演算法,而 md5 則不然,但這只是實驗的一部分。
答案1
簡單echo
來說就是md5sum。
在生成哈希之前,第一個結果將考慮字串末尾的換行符。
$ echo P@ssword1 | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
否則作為@AFH說明如果您不希望有換行符,請執行以下操作:
$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
答案2
沒有一個答案提到,使用echo -n 'password' | …
,您將把密碼寫入持久存儲,即您的歷史記錄。
您可以透過在命令前添加空格來避免這種情況,這取決於 shell(針對您的 shell 進行測試)。閱讀 shell 文件以了解如何處理此問題。
或者,您可以md5sum
直接使用,運行md5sum
,輸入密碼,然後輸入Ctrl+D。不要Enter在密碼和 之間點擊Ctrl+D,除非您想在雜湊中包含換行符號。
答案3
這是一個使用 openssl 的範例
echo -n 'stack overflow' | openssl md5
(stdin)= 481b8423202598ecfb233c5fa68caf68
如果有一天您需要不同的演算法,Openssl 會實作幾種不同的雜湊演算法。
答案4
似乎每個人都建議使用echo
- 至少在大多數時候,謝天謝地,使用-n
,這可以緩解一它的問題(它在末尾打印換行符)。
但echo
不一定一致。您需要記住它有許多行為怪癖,並且系統之間可能不相容。最好是printf
改用。
因此,您應該使用
$ printf '%s' 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
$
對於printf
,如果您想在末尾添加換行符,則必須自己明確地添加它:
$ printf '%s\n' 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
$ echo 'P@ssword1' | md5sum
0a43c426e3d6764fe1f3f7cbb3579eba -
$
而不必要求不獲取它(並希望echo
在稍後某個時刻恰好運行的系統上也能正常工作):
$ echo -n 'P@ssword1' | md5sum
d106b29303767527fc11214f1b325fb6 -
$
擴展這一點的怪癖echo
我上面提到了,這裡有一些:
- 它在不同系統上的運作方式有所不同。許多現代系統支援
-n
告訴echo
不要用換行符號終止輸出,但有些系統可能不支援。如果您想實際列印怎麼辦-n
?某些實作實際上可能會有所不同設定在外殼或環境中。 - 它以特殊方式處理或可能不處理某些字元序列(特別是反斜線轉義字元)。在密碼中包含這些內容並非完全不合理,且 POSIX 不保證 echo 的任何行為(其行為具體是不明確的) 如果第一個參數
-n
或其任何參數包含反斜線。
上面連結的有關使用 printf 而不是 echo 的問題的答案還有更多,如果您好奇的話,還有更多閱讀的連結。