Golang SHA512与OpenSSL SHA512不匹配



我正试图在bash中生成一个字符串的SHA512哈希,然后在golang中验证该SHA512哈希。然而,我无法计算出在两个地方生成相同散列的实用程序/标志的确切组合。

Bash代码:

echo "hello sha world" | openssl dgst -sha512 -hex
9c5b761a9bf8f74da84c57101669b8042b860ca5871a15c4e729758ad1dee58d562ddf8fa303ada1f3e0278fdff4af9a72f57ce0514be98f6a959daabda926f5

Golang代码:

s := sha512.New()
s.Write([]byte(`hello sha world`))
fmt.Println(hex.EncodeToString(s.Sum(nil)))
d13fa494d2609a6f67e906de96d92788bd8ab46dec0f5e48d8cdb8c540628a752aa135262aa5804dcc907e261abe4472faf01fc13eb97e4e8c85e5c0438f2acb

我还尝试了二进制表示的base64编码,但没有任何运气:

Bash:

echo "hello sha world"  | openssl dgst -sha512 | openssl base64 -A
OWM1Yjc2MWE5YmY4Zjc0ZGE4NGM1NzEwMTY2OWI4MDQyYjg2MGNhNTg3MWExNWM0ZTcyOTc1OGFkMWRlZTU4ZDU2MmRkZjhmYTMwM2FkYTFmM2UwMjc4ZmRmZjRhZjlhNzJmNTdjZTA1MTRiZTk4ZjZhOTU5ZGFhYmRhOTI2ZjUK

Golang:

s := sha512.New()
s.Write([]byte(`hello sha world`))
fmt.Println(base64.RawStdEncoding.EncodeToString(s.Sum(nil)))
0T+klNJgmm9n6QbeltkniL2KtG3sD15I2M24xUBiinUqoTUmKqWATcyQfiYavkRy+vAfwT65fk6MheXAQ48qyw

如果有任何帮助,我将不胜感激如何让Golang生成与openssl相同的哈希。提前感谢!

echo命令还发送一个换行符,因此您的第一个示例计算字符串"hello sha worldn"的SHA-512校验和。

如果你在Go中使用相同的方法,你会得到相同的输出:

s := sha512.New()
s.Write([]byte("hello sha worldn"))
fmt.Println(hex.EncodeToString(s.Sum(nil)))

或者简单地说:

fmt.Printf("%xn", sha512.Sum512([]byte("hello sha worldn")))

这些输出(在Go Playground上试试(:

9c5b761a9bf8f74da84c57101669b8042b860ca5871a15c4e729758ad1dee58d562ddf8fa303ada1f3e0278fdff4af9a72f57ce0514be98f6a959daabda926f5

如果您想计算bash中某些文本的SHA-512签出,而不包含换行符,请使用echo-n参数,如下所示:

echo -n "hello sha world" | openssl dgst -sha512 -hex

这输出与您原来的Go代码相同:

d13fa494d2609a6f67e906de96d92788bd8ab46dec0f5e48d8cdb8c540628a752aa135262aa5804dcc907e261abe4472faf01fc13eb97e4e8c85e5c0438f2acb

最新更新