gpt4 book ai didi

java - 使用盐存储和验证散列密码

转载 作者:行者123 更新时间:2023-11-30 03:36:08 25 4
gpt4 key购买 nike

我模拟存储密码哈希并在登录过程中验证它。

我有一个名为 hashPassword(String password) 的方法来获取字符串密码并返回其添加盐的哈希值。

我选择 salt 为静态值,在本示例中,我为密码选择相同的值 (hello123)

public class T1 {

public static void main(String[] args) {
String userDefinedPassword = "hello123";
String hashedPassToStoreInDB = String.valueOf(hashPassword(userDefinedPassword));
System.out.println("what stores in DB: " + hashedPassToStoreInDB);
// store in database

//Password Verify
String inputPassword = "hello123";
String hashedInputPassword = String.valueOf(hashPassword(inputPassword));
System.out.println("Users hashed password: " + hashedInputPassword);

if (hashedPassToStoreInDB.equals(hashedInputPassword)) {
System.out.println("Correct");
} else {
System.out.println("Incorrect");
}
}

private static byte[] hashPassword(String password) {
byte[] salt = new byte[16];
byte[] hash = null;
for (int i = 0; i < 16; i++) {
salt[i] = (byte) i;
}
try {
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, 65536, 128);
SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
hash = f.generateSecret(spec).getEncoded();

} catch (NoSuchAlgorithmException nsale) {
nsale.printStackTrace();

} catch (InvalidKeySpecException ikse) {
ikse.printStackTrace();
}
return hash;
}
}

但结果是:

what stores in DB: [B@219c9a58
Users hashed password: [B@305918a5
Incorrect

为什么这两个值不相同?

我的代码有什么问题吗?

最佳答案

问题出在这里:

String hashedPassToStoreInDB = String.valueOf(hashPassword(userDefinedPassword));

这里:

String hashedInputPassword = String.valueOf(hashPassword(inputPassword));

您正在从 hashPassword 方法返回的 byte[] 创建一个 String,但使用了错误的方法。由于 String#valueOf 方法中的 byte[] 没有重载,因此它结束调用 String#valueOf(Object obj)它将在内部使用Object#toString,而数组的字符串表示形式本身是没有意义的。

使用new String(byte[] byteArray)相反。

String hashedPassToStoreInDB = new String(hashPassword(userDefinedPassword));
//...
String hashedInputPassword = new String(hashPassword(inputPassword));

关于java - 使用盐存储和验证散列密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27843642/

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