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

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

我一直在想,为什么运行“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/

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

答案1

他们都有不同的每次都会选择一个唯一的盐,因为盐永远不能重复使用。为每个密码使用唯一的盐可以防止彩虹桌攻擊。

答案2

事实上,如果您向命令行提供盐,您总会得到相同的结果。

$ 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/

相关内容