gpt4 book ai didi

java - 河豚密码验证

转载 作者:行者123 更新时间:2023-12-01 22:35:43 25 4
gpt4 key购买 nike

我在这个问题中使用了 Spring security,但回答这个问题可能不需要它的知识。

我试图了解Spring security的blowfish加密类(BCrypt)如何验证给定的密码。我尝试过:

  1. 使用BCrypt.gensalt(10);生成盐
  2. 通过 BCrypt.hashpw(clearText, salt) 使用此盐对密码进行编码。

效果很好。然后,我想将用过的盐存储在数据库中,以便在用户输入密码时能够重复使用它。

我意识到 BCryptPasswordEncoder 在检查密码时不使用盐。相反,它使用散列密码作为盐来加密密码:

public boolean matches(CharSequence rawPassword, String encodedPassword) {
[...]
return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
}

所以我尝试了这段代码:

public static void main(String[] args) {
String salt = BCrypt.gensalt(12);
String clearText="test";
String hashed = BCrypt.hashpw(clearText, salt);
String reHashed = BCrypt.hashpw(clearText, hashed);

System.out.println("salt : " + salt);
System.out.println(hashed);
System.out.println(reHashed);
}

输出:

salt : $2a$12$gzUymsNBoW.f1OfkLpb2se
$2a$12$gzUymsNBoW.f1OfkLpb2seFZrniorawujSOp6Qe.PWDIHJvmYSP6y
$2a$12$gzUymsNBoW.f1OfkLpb2seFZrniorawujSOp6Qe.PWDIHJvmYSP6y

这似乎证实了:

good password => hashed = hash(clearPassword, hashed)

我理解错了吗?这是否意味着盐对于密码检查没有用?因此,这是否意味着我不需要将盐存储在数据库中?

最佳答案

BCrypt 将盐存储为它返回的“哈希”字符串的一部分。
这是由 Bcrypt.* 函数处理的,因此您不需要执行任何操作。

关于java - 河豚密码验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26895439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com