无法验证在android中使用的php中保存的临时密码

时间:2016-12-15 09:39:15

标签: php

我是php新手!所以我有一个php文件来创建一个随机的临时密码和一个php文件来验证它并进行更改。

我的随机密码哈希函数是:

function hashSSHA($password) { 
    $salt = sha1(rand());
    $salt = substr($salt, 0, 10);
    $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
    $hash = array("salt" => $salt, "encrypted" => $encrypted);
    return $hash;
}

我验证密码的功能是

function checkhashSSHA($salt, $password) { 
    $hash = base64_encode(sha1($password . $salt, true) . $salt); 
    return $hash;
}

所以在我的第一个php文件中,我以

开头
$random_string = substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 6)), 0, 6);
$hash = hashSSHA($random_string);
$encrypted_temp_password = $hash["encrypted"];
$salt = $hash["salt"];

我将$ salt和$ encrypted_temp_password保存到临时表

所以我尝试使用以下逻辑验证密码

$hash = checkhashSSHA($salt, $db_encrypted_temp_password);
echo $hash;
// check for password equality
if ($db_encrypted_temp_password == $hash) 
{

}

但是回音$hash$hash

输出不同的$db_encrypted_temp_password

我尝试了password_verify()但又没有结果。

那么如何让它验证临时密码?

谢谢。

1 个答案:

答案 0 :(得分:0)

我按照Federkun的建议使用内置密码哈希

$options = array('salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),'cost' => 12,);
$hash = password_hash($password, PASSWORD_BCRYPT, $options);
$encrypted_password = $hash;
$salt = $options['salt'];

然后我用password_verify验证它似乎工作

谢谢