PHP加密无法运行Ubuntu PHP 5.3.6

PHP加密无法运行Ubuntu PHP 5.3.6,php,crypt,Php,Crypt,为什么Ubuntu PHP 5.3.6上的crypt值不匹配?在其他系统上,它们是匹配的 示例代码: <?php $password = '12345'; $saltString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; $salt = '_'; while (strlen($salt) < 9) $salt .= substr($saltString, rand(0, strl

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

密码:12345
加密密码:_8OixMoOTyONAZDOiHbs
加密密码比较:8IK4dGYmlkVo

可能您的系统不支持当前的哈希类型。为什么不尝试另一种散列类型呢

可能您的系统不支持当前的哈希类型。为什么不尝试另一种散列类型呢

我认为
crypt
应该返回返回值前面的salt值。在某些实现中,它显然只有2个字节(您可以使用恒定的CRYPT\u SALT\u长度来检查它)。从OP中打印的输出来看,两个“加密”字符串的相似性仅限于前两个字节。也许这个实现有缺陷,对salt使用了两个以上的字节,但只返回结果中salt的前两个字节。如果是的话,这就解释了区别。您可以通过简单地将盐的长度设置为2来测试这一点


已经说过,您可能需要考虑使用不同的哈希函数。我对PHP知之甚少,但谷歌搜索似乎表明crypt已经过时,而且不太安全。例如,.

我认为
crypt
应该返回返回值前面的salt值。在某些实现中,它显然只有2个字节(您可以使用恒定的CRYPT\u SALT\u长度来检查它)。从OP中打印的输出来看,两个“加密”字符串的相似性仅限于前两个字节。也许这个实现有缺陷,对salt使用了两个以上的字节,但只返回结果中salt的前两个字节。如果是的话,这就解释了区别。您可以通过简单地将盐的长度设置为2来测试这一点


已经说过,您可能需要考虑使用不同的哈希函数。我对PHP知之甚少,但谷歌搜索似乎表明crypt已经过时,而且不太安全。例如,.

但我认为php>=5.3支持任何哈希类型,而不管平台是什么?从php 5.3.0开始,php包含自己的实现,如果系统不支持一个或多个算法,php将使用它。但我认为php>=5.3支持任何哈希类型,而不管平台是什么?从php 5.3.0开始,PHP包含自己的实现,如果系统缺少对一个或多个算法的支持,将使用它。