抱歉,如果这是一个愚蠢的问题,我只是想知道:bcrypt 中的盐有什么意义?我的意思是,如果您有以下用于从密码创建哈希的代码:
function generateSalt() {
$salt = '$2a$13$';
$salt = $salt . '1111111111111111111111';
return $salt;
}
function generateHash($salt, $password) {
$hash = crypt($password, $salt);
return $hash;
}
$salt = generateSalt();
$providedPassword = generateHash($salt, rand(3,29));
echo $providedPassword;
以上输出为例:
$2a$13$111111111111111111111uDdpsIcwCVOwEyNueskskXkniY5206fW
$2a$13$111111111111111111111udcvrNt9quPukFRl8./jXRzDGfE9lw0W
因此,您可以清楚地看到盐结束的位置,如果有人获取数据库,则盐没有意义,因为他们只能删除盐部分并仅搜索散列密码。那么,我使用 bcrypt 是否错误? (静态盐只是为了显示它出现在我的哈希值中的位置),或者有什么原因吗?
背后的想法salt https://en.wikipedia.org/wiki/Salt_%28cryptography%29即使两个输入相同,只要每次使用不同的盐,哈希值也不会相同。
例如,许多用户选择相同的密码。如果您只存储密码的哈希值,数据库将包含许多相同的哈希值 - 因此,如果攻击者只找到密码一次,他就可以轻松地将其用于所有这些用户。但是,如果每个用户的密码都使用不同的盐值进行哈希处理,则攻击者将不得不破解存储中存储的每个哈希值。
我不确定你正在使用的代码是什么(那是什么crypt
函数?),但如果将盐值添加到实际哈希值之前就可以了只要哈希本身也是使用盐计算的。无论如何,您都需要存储原始盐来验证新输入(密码)是否与存储的哈希相匹配。但是,只要您更改每次哈希使用之间的盐值,就没有简单的方法来收集有关原始输入的信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)