gpt4 book ai didi

java - 如何检查加盐和哈希密码的匹配

转载 作者:行者123 更新时间:2023-11-30 01:46:12 25 4
gpt4 key购买 nike

我正在研究密码安全和用户登录,更具体地说,是在数据库中存储和匹配加盐密码哈希值。我了解加盐和散列的基础知识,但我不明白当盐在每个散列之前随机生成时,我应该如何在登录尝试时检查存储的散列值?

public static void test(String password) throws NoSuchAlgorithmException, InvalidKeySpecException {
int iterations = 65536;
char[] passChar = password.toCharArray();
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] salt = new byte[16];
random.nextBytes(salt);

PBEKeySpec spec = new PBEKeySpec(passChar, salt, iterations, 512);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] hash = factory.generateSecret(spec).getEncoded();

System.out.println(iterations + ":\n" + toHex(salt) + ":\n" + toHex(hash));
}

最佳答案

密码的盐值应与哈希值一起存储。有时这是作为散列的一部分完成的(例如散列的前 x 个字符是盐),有时是单独的(例如另一列)。

检查密码时,不应生成新的随机盐,而应使用之前生成并存储的盐。

因此,您使用用户提供的密码和存储的盐创建另一个哈希,然后检查它是否与存储的哈希匹配。

大多数密码编码器都提供了一种可以为您执行此操作的方法,例如,查看 this article that explains how to use BCrypt Password Encoder.

关于java - 如何检查加盐和哈希密码的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57850716/

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