【发布时间】:2012-10-15 23:58:43
【问题描述】:
我使用 this 和 this 制作了一个密码散列脚本,除了某些时候 crypt 函数将散列作为“*0”,然后失败。
PHP 代码
$password='password';
$salt = '$2y$07$';
$salt .= base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_RANDOM));
$salt .='$$';
$password_hash = crypt($password, $salt)';
echo $password_hash.'<br />';
使用上面我得到的值是
$salt = '$2y$07$8K3i8rJ7n7bsJA36CfbabQ==$$';
$crypt_password = $password_hash;
$crypt_password = '$2y$07$8K3i8rJ7n7bsJA36CfbabO9ojj2hl61azl8CubJQhRTgla4ICiCVC';
if (crypt($password,$crypt_password)===$crypt_password)
{
echo 'password verified';
}
else{
echo 'password NOT verified';
}
请查看并提出任何可能的方法以使其正常工作。
谢谢。
【问题讨论】:
-
$crypt_password = $password_hash抱歉我没有在上面提到 -
验证步骤正确(
crypt从crypt返回的“哈希”中提取盐)。问题是,base64_encode发出无效字符,例如+(crypt接受的字符:"./0-9A-Za-z")。如果base64_encode返回无效字符,则返回"*0"。 -
这里有多个bcrypt 实现,为什么还要自己编写?
标签: php password-hash