php crypt问题

时间:2011-05-27 03:24:04

标签: php encryption

我正在尝试以加密格式存储密码,但它似乎无法正常工作。这是我正在使用的PHP代码。

function encryptMe($input, $salt){
    $output = crypt($input,$salt);
return $output;
}

function getSalt(){
   //set number of repititions
   $reps="5000";

   $salt = substr(str_replace('+', '.', base64_encode(
            pack('N4', mt_rand(), mt_rand(), mt_rand(), mt_rand())
            )), 0, 16);
   $salt = "$6$"."rounds=".$reps."$".$salt;     
   return $salt;    
}

我的代码中也有以下声明。

$input['password'] = $_POST['password'];
$salt = getSalt();
$input['password'] = encryptMe($input['password'],$salt);

我用不同的盐运行了这个多次,但密码相同并且保持相同的哈希值。改变盐似乎没有任何影响,我无法弄清楚出了什么问题。有人可以看一下这段代码并帮助我吗?

还有什么方法可以证明这是使用SHA512吗?

1 个答案:

答案 0 :(得分:1)

这是因为crypt()只返回几个第一个字符,所以输入,即使是不同的,仍然可能返回相同的字符串,因为只有最后一个字符发生了变化。

替代方法是将hash()用于SHA-256。有人在你的帖子中分享了一个非常有趣的链接。

修改

这是vBulletin加密密码的方式。不知道他们是否还在使用这种方法。

$password_hash = md5(md5($password_text) . $user_salt);
// $user_salt is a random three character string stored 
// in the user table as 'salt'.