【问题标题】:Using BCrypt, and generating salts使用 BCrypt,并生成盐
【发布时间】:2013-01-16 15:06:05
【问题描述】:

所以。

我想使用 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 上提出的问题,我无法再次找到该问题) 这纯粹用于教育目的。

【问题讨论】:

标签: php salt encryption bcrypt


【解决方案1】:

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

$passwordIsOk = crypt($password, $hash) === $hash;

【讨论】:

  • 谢谢,所以你的意思是当他们登录时验证用户的密码时,我不需要使用盐?我可以简单地使用 if(crypt($userpass,$hash) === $hash; ? $hash 中存储的数据是什么?
  • 对,你不需要存储盐,因为它会被 BCrypt 嵌入到哈希中。
  • $hash 存储什么?
  • @SworoopMahapatra $hashcrypt() 命令的先前输出。它是一个格式化的字符串,包括使用的算法、盐和散列。 crypt() 命令接受它作为参数,并将从中获取盐并将其作为盐应用于第一个参数。加盐旨在防止黑客能够利用预先计算的哈希数据库轻松破解密码,同时确保所有存储的密码都具有唯一的哈希(因为某些用户将拥有相同的密码,如果没有加盐将意味着他们'会有相同的哈希)。
  • 谢谢 Kitsune。谢谢洛朗。 :) 全部清理完毕
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2019-04-14
相关资源
最近更新 更多