我第一次使用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的工作方式。
答案 0 :(得分:1)
是的,这是BCrypt的预期行为。没有必要保持盐的安全。它的用户特定性非常重要。 BCrypt.checkpw函数在内部需要salt,以便能够计算用户输入的密码的哈希值,并将其与您存储的哈希值进行比较。
另见:https://security.stackexchange.com/questions/17421/how-to-store-salt