2008-11-10 55 views
173

bCrypt's javadoc对如何加密密码验证码:我需要用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 match"); 

这些代码片段暗示对我来说,随机产生的盐被扔掉。这是这种情况,还是这只是一个误导性的代码片段?

回答

201

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

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

+58

盐是纳入密码。所以你不必保存盐。 – 2008-11-10 08:57:08