【问题标题】:PHP Crypt not working Ubuntu PHP 5.3.6PHP Crypt 不工作 Ubuntu PHP 5.3.6
【发布时间】:2012-02-10 18:51:11
【问题描述】:

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

【问题讨论】:

    标签: php crypt


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 但我认为 php >= 5.3 支持任何散列类型而不管平台?
      • 从 PHP 5.3.0 开始,PHP 包含自己的实现,如果系统缺乏对一种或多种算法的支持,将使用它。
      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 2011-09-13
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多