PHP Crypt无法正常使用Ubuntu PHP 5.3.6

时间:2012-02-10 18:51:12

标签: php crypt

为什么在Ubuntu PHP 5.3.6上的crypt值不匹配?在其他系统上,它们匹配。

示例代码:

<?php

$password = '12345';

$saltString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$salt = '_';
while (strlen($salt) < 9)
    $salt .= substr($saltString, rand(0, strlen($saltString)-1), 1);
$cryptedPassword = crypt($password, $salt);

printf("Password: %s\n", $password);
printf("Crypted Password: %s\n", $cryptedPassword);

$cryptCompare = crypt($password, $cryptedPassword);

printf("Crypted Password Comparison: %s\n", $cryptCompare);

?>

Password: 12345
Crypted Password: _8OixMoOTyONAZDOiHbs
Crypted Password Comparison: _8IK4dGYmlkVo

2 个答案:

答案 0 :(得分:1)

我相信crypt应该返回前面返回值前面的salt值。在某些实现中,它显然只有2个字节(您可以使用常量CRYPT_SALT_LENGTH进行检查)。从查看OP中打印的输出,两个“加密”字符串的相似性限于前两个字节。也许实现存在缺陷,并且对salt使用两个以上的字节,但只返回结果中salt的前两个字节。如果是这样,那将解释差异。您可以通过简单地将盐长度设置为2来测试。

话虽如此,您可能需要考虑使用不同的散列函数。我对PHP知之甚少,但有点谷歌搜索似乎表明crypt已经过时且不太安全。例如,this is one such post

答案 1 :(得分:0)

也许您的系统不支持您当前的哈希类型。为什么不尝试不同的哈希类型?
http://php.net/manual/en/function.crypt.php