为什么md5密码的哈希值不同?


22

我一直想知道,为什么每次运行“ echo'helloworld'| openssl passwd -1 -stdin”都会产生不同的结果?密码并登录到我的系统,它如何工作?

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/

我会认为,因为我使用该哈希值向系统描述了我的密码,所以每次都应该获得相同的结果。我为什么不呢?


3
如果每次都相同,则攻击者可能会哈希数十亿个通用密码并轻松地检查它们。
David Schwartz 2013年

Answers:


37

他们都有不同的。每次都选择唯一的盐,因为盐永远都不能重复使用。对每个密码使用唯一的盐会使它们抵抗彩虹表攻击。



6
最好提到输出包含$ 1 $之后的盐(美元符号是分隔符)。

6
那么在'$ 1 $ xlm86SKN $ vzF1zs3vfjC9zRVI15zFl1'的哈希中,xlm86SKN是盐,而vzF1zs3vfjC9zRVI15zFl1是盐腌的helloworld的哈希?
彼得

2
@Peter:完全是。
Joachim Sauer 2013年

3

的确,如果您向命令行提供盐,则始终会得到相同的结果。

$ 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/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.