我遇到了和你一样的情况,Prateek,经过一些研究,下面的代码做了我想要的,这就是你想要的。
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
function make_password($password) {
$algorithm = "pbkdf2_sha256";
$iterations = 10000;
$newSalt = mcrypt_create_iv(6, MCRYPT_DEV_URANDOM);
$newSalt = base64_encode($newSalt);
$hash = hash_pbkdf2("SHA256", $password, $newSalt, $iterations, 0, true);
$toDBStr = $algorithm ."$". $iterations ."$". $newSalt ."$". base64_encode($hash);
// This string is to be saved into DB, just like what Django generate.
echo $toDBStr;
}
function verify_Password($dbString, $password) {
$pieces = explode("$", $dbString);
$iterations = $pieces[1];
$salt = $pieces[2];
$old_hash = $pieces[3];
$hash = hash_pbkdf2("SHA256", $password, $salt, $iterations, 0, true);
$hash = base64_encode($hash);
if ($hash == $old_hash) {
// login ok.
return true;
}
else {
//login fail
return false;
}
}
?>
make_password 中生成的$toDBStr 和你在这个帖子里的一模一样,你可以将字符串保存到任何数据库,甚至可以继续使用 Django 创建的数据库。
你需要选择字符串传递给 verify_Password 函数来验证密码是否与用户输入的相同。
以上 PHP 代码需要 PHP 5.5 才有 hash_pbkdf2 函数。
尽情享受吧。