1

所以。

我想将 BCrypt 用于我的用户身份验证表单。我可以使用代码注册用户

<?php
$salt = '$2a$07$R.gJb2U2N.FmZ4hPp1y2CN$';
crypt("secretpassword", $salt);
?>

在这里,而不是使用恒定的盐。我想使用生成随机盐

// Posted Code from http://pastebin.com/wLxDEhD7.
$Allowed_Chars =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./';
$Chars_Len = 63;
$salt = "";
for($i=0;$i<45 ;$i++)
{
    $salt .= $Allowed_Chars[mt_rand(0,$Chars_Len)];
}

并将其存储到数据库中。在此之前我很清楚(我希望:D)接下来我需要在用户登录时检查密码。为此,我需要用户的输入数据,即该用户使用的盐。

crypt("secretpassword", $salt);

我可以获得用户输入,但我如何知道已使用的盐?我不清楚这一点。

代码已从 phpmaster.com 和http://pastebin.com/wLxDEhD7复制(从 SO 上提出的问题,我无法再次找到该问题)这纯粹用于教育目的。

4

1 回答 1

2

盐存储在 BCrypt 生成的散列中。所以只要这样做就可以了:

$passwordIsOk = crypt($password, $hash) === $hash;
于 2013-01-16T06:59:48.917 回答