使用crypt()函数生成相同加密的不同密码

时间:2015-09-30 10:39:40

标签: php encryption

我使用PHP的crypt()函数在存储到数据库之前加密密码。现在如果密码包含数字,则所有具有相同子字符串的密码都会生成相同的加密。例如,以下所有密码都会生成相同的加密。

echo crypt('abcdefg123','mykey').'<br>';
echo crypt('abcdefg123','mykey').'<br>';
echo crypt('abcdefg123456','mykey').'<br>';

加密密码结果为

myeWT99Ku6TaM

我做错了什么?还是一个bug?

2 个答案:

答案 0 :(得分:2)

crypt函数将salt作为第二个参数。 salt具有here所述的特殊格式 您提供的salt被识别为标准DES 算法。

  

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

提供适当的盐。例如,尝试使用MD5:

echo crypt('abcdefg123','$1$mykeyabcd$').'<br>';
echo crypt('abcdefg123','$1$mykeyabcd$').'<br>';
echo crypt('abcdefg123456','$1$mykeyabcd$').'<br>';

答案 1 :(得分:0)

我认为这是因为盐。 默认情况下,你可以在crypt函数中使用 CRYPT_STD_DES 哈希类型,这种类型适用于两个字符salt,但你使用5个字符salt。

  

在salt中使用无效字符会导致crypt()失败。   http://php.net/manual/ru/function.crypt.php