【问题标题】:Do I need to store the salt with bcrypt?我需要用 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?

【问题讨论】:

    标签: java encryption passwords salt bcrypt


    【解决方案1】:

    盐被合并到哈希中(以 base64 样式格式编码)。

    例如,在传统的 Unix 密码中,salt 存储为密码的前两个字符。其余字符代表哈希值。检查器函数知道这一点,并将散列分开以取出盐。

    【讨论】:

    • 密码中包含盐。所以你不必保存盐。
    • 谢谢。我希望他们在 javadoc 中这么说 :) (我已经查看了源代码并确认了 - 但我之前不知道我在寻找什么)
    • 谢谢 - 我也试图解决这个问题!现在我想知道这是否是个好主意。将盐保存在哈希中而不是单独存储它有优点/缺点吗?
    • @Adam - 由于盐是随机生成的,这意味着您不需要将数据库中的两者关联起来的方法。
    • 我查看了源代码,发现虽然 salt 参数的 JavaDoc 是“可能使用 BCrypt.gensalt 生成的”,但我发现你必须使用 genSalt() 方法或者你获取异常 =/
    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2018-03-23
    • 2023-03-15
    • 2012-10-13
    相关资源
    最近更新 更多