Linux

為什麼openssl會為同一個字元串創建不同的hash,linux在切換使用者時如何接受不同的hash?

  • November 21, 2021

背景

  • 作為一個實驗,我通過手動創建條目來添加新使用者(作為 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

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