Java 我需要用bcrypt储存盐吗?

Java 我需要用bcrypt储存盐吗?,java,encryption,passwords,salt,bcrypt,Java,Encryption,Passwords,Salt,Bcrypt,具有如何加密密码的以下代码: 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

具有如何加密密码的以下代码:

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");

这些代码片段对我来说意味着随机生成的盐被扔掉了。是这样,还是这只是一个误导性的代码片段?

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


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

salt包含在密码中。所以你不用省盐了,谢谢你。我希望他们在javadoc中这样说:)(我已经查看了源代码并确认了-但我不知道我之前在寻找什么)谢谢-我也在试图弄明白这一点!现在我想知道这是不是个好主意。将salt保存在散列中比单独存储有优势/劣势吗?@Adam-由于salt是随机生成的,这意味着您不需要在数据库中使用将这两个内容关联起来的方法。我查看了源代码,发现尽管salt参数的JavaDoc是“可能是使用BCrypt.gensalt生成的”,我发现必须使用gensalt()方法,否则会出现异常=/