我是第一次使用jBCrypt,我没有在我的项目中使用Spring,也不想让那个笨重的库来做一件简单的事情-- BCrypt。
我的理解是加盐的散列包括将盐与密码组合,然后对其进行散列。然而,使用这个库的结果显示,最终的散列似乎基本上是散列之前的盐。
这是我的测试代码:
public static void main(String[] args) throws Exception{
String salt = BCrypt.gensalt();
System.out.println("SALT: " + salt);
String pass = "passwordpasswordpassword";
String hash = BCrypt.hashpw(pass, salt);
System.out.println("HASH: " + hash);
}这是输出:
SALT: $2a$10$gJ9JwqTC0jNJEhX3IUl7je
HASH: $2a$10$gJ9JwqTC0jNJEhX3IUl7jeo18wnF1AgMjQha78sFA/c5Mubx49j6q这让我很奇怪。我想知道我是不是用错了这个库,或者我只是误解了BCrypt的工作方式。
发布于 2017-01-10 23:20:15
是的,这是BCrypt的预期行为。没有必要保证盐的安全。它是特定于用户的,这一点很重要。BCrypt.checkpw函数在内部需要盐,以便能够计算用户输入的密码的散列,并将其与您存储的散列进行比较。
另请参阅:https://security.stackexchange.com/questions/17421/how-to-store-salt
https://stackoverflow.com/questions/39755786
复制相似问题