java - Go SHA-256 哈希不同于 Java SHA-256 哈希

标签 java hash go sha

如果我用“GO”语言生成 SHA-256 哈希,与 Java 等价物相比,我得到一个不同的字节数组。

这是 GO 版本:

fmt.Println(getSha256([]byte("5nonce=5")))

生成的数组如下所示:

41 79 186 235 199 123 95 226 16 59 51 161 112 245 192 50 21 66 180 250 179 109 153 18 233 148 16 237 156 69 163 150]

这个应该在 Java 代码中做同样的事情:

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

md.update("5nonce=5".getBytes()); 
byte[] digest = md.digest();

但是结果是这个字节数组

[41, 79, -70, -21, -57, 123, 95, -30, 16, 59, 51, -95, 112, -11, -64, 50, 21, 66, -76, -6, -77, 109, -103, 18, -23, -108, 16, -19, -100, 69, -93, -106]

为什么不同?我需要如何更改 java 版本才能像 Go 版本一样工作?

最佳答案

Why are they different?

他们不是,真的。它们是相同的位。只是 Java 没有无符号字节——所以任何设置了最高位的字节都是负数。在每种情况下,您都会看到 Java 结果 = Go 结果 - 256。

如果将两个字节数组都转换为十六进制或 base64,您会看到相同的结果。

关于java - Go SHA-256 哈希不同于 Java SHA-256 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24461629/

相关文章:

java - 为什么在Java中设计单例模式时需要双重检查锁?

java - 通过按给定百分比增加来传递和更新分数数组

java - 当到达 GridView 末尾时无限调用 "onScroll"

ruby - 从 Ruby 中的 MongoDB 嵌套哈希中提取正确的字符串

Haskell 加密哈希 SHA256 replit 失败

java - 无法在 Netbeans 中连接 SQL 数据库

git - 如何使用 GitLab API 查找文件的提交哈希值?

arrays - 要从列表中添加或删除的 Golang 映射或结构

google-chrome - CORS 挫败感

go - 设置在 Gin 中未找到的路线