gpt4 book ai didi

java - 哈希对相同的输入返回不同的结果

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

即使连续 3 次使用相同的字符串,我也无法让 MessageDigest 输出相同的散列。我已将代码简化为基础,但此行为仍然存在。

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

public class foo {

private static byte[] hashPass(String _pass) {
MessageDigest mDigest;
try {
mDigest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
System.out.println("[" + e.getMessage() + "] Unable to create message digest");
return null;
}

try {
return mDigest.digest( _pass.getBytes("UTF-8") );
} catch (UnsupportedEncodingException e) {
System.out.println("[" + e.getMessage() + "]");
return null;
}
} //private boolean hashPass(...)

public static void main(String[] args) {

System.out.println("Hash1: " + hashPass("string"));
System.out.println("Hash2: " + hashPass("string"));
System.out.println("Hash3: " + hashPass("string"));
}

}

//Outputs:
//Hash1: [B@7852e922
//Hash2: [B@4e25154f
//Hash3: [B@70dea4e

奇怪的是它在每次重新运行时输出相同的输出——这意味着内部状态每次都以相同的方式改变?它是否使用盐或其他我不知道并且应该指定/使用的输入?

最佳答案

hashPass() 方法返回一个 byte[] 数组,在 java 中数组没有有意义的 toString() 表示。要显示数组的元素,请使用 Arrays.toString() :

System.out.println(Arrays.toString(hashPass("string")));

将打印:

[71, 50, -121, -8, 41, -115, -70, 113, 99, -88, -105, -112, -119, 88, -9, -64, -22, -25, 51, -30, 93, 46, 2, 121, -110, -22, 46, -36, -101, -19, 47, -88]

或将 byte[] 数组转换为十六进制表示:

byte[] bytes = hashPass("string");
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02X", b));
}
System.out.println(sb);

将打印:

473287F8298DBA7163A897908958F7C0EAE733E25D2E027992EA2EDC9BED2FA8

关于java - 哈希对相同的输入返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54947784/

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