我正在尝试用相同的算法(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(方法将字节转换为十六进制字符串
或使用此链接了解更多方法如何将字节数组转换为十六进制字符串,反之亦然?