提供的链接无法回答问题。在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);
}
}
答案 0 :(得分:1)
尝试这个。您的代码没有问题,您正在打印对象引用。 SHA-256生成等于32个字节的64个长度的十六进制数据。您可以使用 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);
}