我需要用 bcrypt 存储盐吗?
Posted
技术标签:
【中文标题】我需要用 bcrypt 存储盐吗?【英文标题】:Do I need to store the salt with bcrypt? 【发布时间】:2010-09-21 13:55:32 【问题描述】:bCrypt's javadoc 有这个密码如何加密的代码:
String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
要检查明文密码是否与之前经过哈希处理的密码匹配,请使用 checkpw 方法:
if (BCrypt.checkpw(candidate_password, stored_hash))
System.out.println("It matches");
else
System.out.println("It does not match");
这些代码 sn-ps 向我暗示随机生成的盐被扔掉了。是这样吗,还是这只是一个误导性的代码 sn-p?
【问题讨论】:
【参考方案1】:盐被合并到哈希中(以 base64 样式格式编码)。
例如,在传统的 Unix 密码中,salt 存储为密码的前两个字符。其余字符代表哈希值。检查器函数知道这一点,并将散列分开以取出盐。
【讨论】:
密码中包含盐。所以你不必保存盐。 谢谢。我希望他们在 javadoc 中这么说 :) (我已经查看了源代码并确认了 - 但我之前不知道我在寻找什么) 谢谢 - 我也试图解决这个问题!现在我想知道这是否是个好主意。将盐保存在哈希中而不是单独存储它有优点/缺点吗? @Adam - 由于盐是随机生成的,这意味着您不需要将数据库中的两者关联起来的方法。 我查看了源代码,发现虽然 salt 参数的 JavaDoc 是“可能使用 BCrypt.gensalt 生成的”,但我发现你必须使用 genSalt() 方法或者你获取异常 =/以上是关于我需要用 bcrypt 存储盐吗?的主要内容,如果未能解决你的问题,请参考以下文章