gpt4 book ai didi

java - 哈希仅返回 8 或 9 个字符

转载 作者:行者123 更新时间:2023-11-30 05:54:27 25 4
gpt4 key购买 nike

提供的链接没有回答问题。在 MessageDiggest 中它说:

toString()
Returns a string representation of this message digest object.

我不清楚为什么这总是只有 8 或 9 个字符。

我有以下方法创建散列密码。它只返回 8 或 9 个字符,我想知道它是否有问题:

import java.security.MessageDigest;
import java.security.SecureRandom;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;

public class Password {
public static void main(String[] args) {

String[] saltPassword = createPassword("password");

System.out.println("Salt = " + saltPassword[0]);
System.out.println("Password = " + saltPassword[1]);
}

private static String[] createPassword(String password) {
String [] saltPassword = new String[2];
try{
SecureRandom random = new SecureRandom();
byte[] salt = new byte[32];
random.nextBytes(salt);

MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(salt);
md.update(password.getBytes("UTF8"));
byte[] digest = md.digest();

saltPassword[0] = salt.toString();
saltPassword[1] = digest.toString();

System.out.println(digest);


}catch(NoSuchAlgorithmException e1){
System.out.println("FATAL ERROR: " + e1);
System.exit(0);
}catch(UnsupportedEncodingException e2){
System.out.println("FATAL ERROR: " + e2);
System.exit(0);
}

return(saltPassword);
}

}

最佳答案

尝试这样做。您的代码在打印对象引用时没有问题。 SHA-256 生成 64 长度的十六进制数据,等于 32 字节。您可以使用 DatatypeConverter 类将此字节数据转换为另一种格式,但下面的代码可能会解决您的问题。

 private static String[] createPassword(String password) {
String [] saltPassword = new String[2];
try{
SecureRandom random = new SecureRandom();
byte[] salt = new byte[32];
random.nextBytes(salt);

MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(salt);
md.update(password.getBytes("UTF8"));
byte[] digest = md.digest();

saltPassword[0] = DatatypeConverter.printHexBinary(salt);
saltPassword[1] = DatatypeConverter.printHexBinary(digest);

System.out.println(DatatypeConverter.printHexBinary(digest));


}catch(NoSuchAlgorithmException e1){
System.out.println("FATAL ERROR: " + e1);
System.exit(0);
}catch(UnsupportedEncodingException e2){
System.out.println("FATAL ERROR: " + e2);
System.exit(0);
}

return(saltPassword);
}

关于java - 哈希仅返回 8 或 9 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53415675/

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