Do I need to store the salt with bcrypt?
Bcrypt的javaDoc提供了如何加密密码的代码:
1
| String pw_hash = BCrypt. hashpw(plain_password, BCrypt. gensalt()); |
要检查明文密码是否与以前散列的密码匹配,请使用checkpw方法:
1 2 3 4
| 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。所以你不用省盐了。
- 谢谢。我希望他们在javadoc中这样说:(我已经查看了来源并确认了——但我不知道我以前在找什么)
- 谢谢-在python文档中也没有提到。
- 谢谢-我也在想办法!现在我想知道这是不是个好主意。将盐保存在土豆泥中,而不是单独存放,这有什么好处/缺点吗?
- @亚当-由于盐是随机生成的,这意味着您不需要有一个方法将数据库中的两个东西关联起来。
- 我查看了源代码,发现尽管salt参数的javadoc"可能是使用bcrypt.gensalt生成的",但我发现您必须使用gensalt()方法,否则会得到异常=/
- 或者把盐放在一个特别的格式。他们也可能已经将salt作为方法的参数排除在外,只是在内部调用了它。用我自己的salt测试代码证实了这一点(P.S.很抱歉有双重评论)。这让我想知道这段代码到底有多安全(也许可以…我只是想知道)
- 这里的代码看起来不错:crackstation.net/hashing-security.htm