Linux
為什麼openssl會為同一個字元串創建不同的hash,linux在切換使用者時如何接受不同的hash?
背景
- 作為一個實驗,我通過手動創建條目來添加新使用者(作為 root 使用者)到
/etc/passwd
.openssl
特別是要對我使用的密碼進行雜湊處理,OpenSSL 1.1.1g
但結果在不同版本中應該是相同的。- 我注意到每次我對字元串“
testing
”進行雜湊處理時都會得到不同的結果。`# openssl passwd testing YY9E0oGqqamCM
openssl passwd testing
csL9dpD2Iy3H2`
- 然後我將兩個雜湊都添加到
/etc/passwd
文件中,如下所示:`# echo “root2:YY9E0oGqqamCM:0:0:root:/root:/bin/bash” >> /etc/passwd
echo “root3:csL9dpD2Iy3H2:0:0:root:/root:/bin/bash” >> /etc/passwd`
- 最後,我成功切換到每個使用者,儘管他們的雜湊值不同:
`$ whoami reguser
$ su root2 Password: testing
whoami
root
exit
$ whoami reguser
$ su root3 Password: testing
whoami
root`
問題
testing
即使文件中的實際雜湊值不同,我如何能夠使用相同的密碼(即)/etc/passwd
?
如果有人能解釋幕後發生的事情,這將是很棒的。
- 我假設字元串“testing”每次被散列時都被賦予不同的鹽,但是當我輸入密碼以切換使用者時,linux如何知道對應的鹽是什麼?
- 雜湊條目中的前兩個字元是鹽。
openssl passwd
必須有鹽,它總是2個字元長,不多也不少。- 所以在 和 的情況下和是
YY9E0oGqqamCM
各自的鹽。csL9dpD2Iy3H2``YY``cs
$ openssl passwd -salt YY testing YY9E0oGqqamCM $ openssl passwd -salt cs testing csL9dpD2Iy3H2
密碼雜湊通常是加鹽的。如果您不指定鹽,那麼它是隨機生成的。因此結果不同。鹽是輸出的一部分:
openssl passwd -salt xx foo xxY8K1xpBNqPg openssl passwd -salt xx foo xxY8K1xpBNqPg