Password

為什麼 md5 密碼的雜湊值不同?

  • June 28, 2015

我一直在想,為什麼每次執行“echo ‘helloworld’ | openssl passwd -1 -stdin”都會產生不同的結果?如果我將任何散列放在我的 /etc/shadow 中,我可以將它們用作我的密碼和登錄到我的系統,它是如何工作的?

computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$xlm86SKN$vzF1zs3vfjC9zRVI15zFl1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$/0.20NIp$pd4X9xTZ6sF8ExEGqAXb9/
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$sZ65uxPA$pENwlL.5a.RNVZITN/zNJ1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$zBFQ0d3Z$SibkYmuJvbmm8O8cNeGMx1
computer:/ user$ echo 'helloworld' | openssl passwd -1 -stdin
$1$PfDyDWER$tWaoTYym8zy38P2ElwoBe/

我認為因為我使用這個雜湊向系統描述我的密碼應該是什麼,所以我每次都應該得到相同的結果。我為什麼不呢?

他們都有不同的。每次都會選擇一種獨特的鹽,因為鹽永遠不應該被重複使用。為每個密碼使用唯一的鹽使它們能夠抵抗彩虹表攻擊。

事實上,如果你向命令行提供鹽,你總是會得到相同的結果。

$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/
$ echo 'helloworld' | openssl passwd -1 -stdin -salt my-salt
$1$my-salt$S/PsLSioHR8ffN8bpIzsk/

引用自:https://serverfault.com/questions/514382