1

为什么 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
4

2 回答 2

1

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

话虽如此,您可能需要考虑使用不同的散列函数。我对 PHP 知之甚少,但谷歌搜索似乎表明 crypt 已经过时并且不是很安全。例如,这是一篇这样的帖子

于 2012-02-10T21:22:54.790 回答
0

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

于 2012-02-10T19:14:32.503 回答