Java和Go哈希值与sha256不同



我正在尝试用相同的算法(sha256(在Java和Go中为相同的输入生成哈希。有趣的是,我得到了两个值。感谢任何解释,我需要在Go中生成用Java生成的相同哈希。

Java代码:

public byte[] sha256Hash(byte[] content) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
return digest.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage(),e);
}
}
byte[] to ="AA".getBytes();
byte[] shaed = sha256Hash(to);
System.out.println(Arrays.toString(shaed));

Java输出:[88,-69,17,-100,53,81,58,69,29,36,-36,32,-17,14,-112,49,-20,-123,-77,91,-4,-111,-99,38,62126,93,-104,104,-112和-100,-75]

Go:

fmt.Println(sha256.Sum256([]byte("AA")))

Go输出:[88 187 17 156 53 81 58 69 29 36 220 32 239 14 144 49 236 133 91 252 145 157 38 62 126 93 152 104 144 156 181]

您没有将字节转换为十六进制。

import javax.xml.bind.DatatypeConverter;
class GetHash{
public static String generateHash(String pass) throws NoSuchAlgorithmException{

MessageDigest sha=MessageDigest.getInstance("SHA-256");

byte[] b=sha.digest(pass.getBytes());

return DatatypeConverter.printHexBinary(b);
}}

使用DatatypeConverter.printHexBinary(b(方法将字节转换为十六进制字符串

或使用此链接了解更多方法如何将字节数组转换为十六进制字符串,反之亦然?

最新更新