不同的密码,在php中使用crypt的相同哈希检查

时间:2014-03-26 13:17:16

标签: php hash password-protection

如果我使用crypt()哈希密码:

$password = "my_password_12345";
$salt = base64_encode(openssl_random_pseudo_bytes(64, $cstrong));
$crypt = crypt($password, $salt);

我得到这样的东西

echo $crypt; //AG6hHvhjwnqpc

所以,当我检查哈希时,我这样做,一切正常

echo crypt($password, $crypt); //AG6hHvhjwnqpc

但为什么会发生以下情况?我做了同样的检查,但使用类似于前一个的密码,我得到相同的哈希。

$password = "my_password_12345_not!";
echo crypt($password, $crypt); //AG6hHvhjwnqpc

我希望有一个不同的哈希,但我得到相同的

1 个答案:

答案 0 :(得分:3)

在PHP中,crypt函数仅使用8个第一个字符:

摘自documentation

  

标准的基于DES的crypt()返回salt作为输出的前两个字符。它也只使用str的前八个字符,因此以相同的八个字符开头的较长字符串将产生相同的结果(当使用相同的salt时)。