为了账号安全,请及时绑定邮箱和手机立即绑定

Golang SHA512 不匹配 OpenSSL SHA512

Golang SHA512 不匹配 OpenSSL SHA512

Go
慕莱坞森 2022-06-21 16:34:29
我正在尝试在 bash 中生成字符串的 SHA512 哈希,然后在 golang 中验证 SHA512 哈希。但是,我无法弄清楚实用程序/标志的确切组合来获得在两个地方产生的相同哈希值。巴什代码:echo "hello sha world" | openssl dgst -sha512 -hex9c5b761a9bf8f74da84c57101669b8042b860ca5871a15c4e729758ad1dee58d562ddf8fa303ada1f3e0278fdff4af9a72f57ce0514be98f6a959daabda926f5戈兰代码:s := sha512.New()s.Write([]byte(`hello sha world`))fmt.Println(hex.EncodeToString(s.Sum(nil)))d13fa494d2609a6f67e906de96d92788bd8ab46dec0f5e48d8cdb8c540628a752aa135262aa5804dcc907e261abe4472faf01fc13eb97e4e8c85e5c0438f2acb我还尝试了二进制表示的base64编码,但没有任何运气:重击:echo "hello sha world"  | openssl dgst -sha512 | openssl base64 -AOWM1Yjc2MWE5YmY4Zjc0ZGE4NGM1NzEwMTY2OWI4MDQyYjg2MGNhNTg3MWExNWM0ZTcyOTc1OGFkMWRlZTU4ZDU2MmRkZjhmYTMwM2FkYTFmM2UwMjc4ZmRmZjRhZjlhNzJmNTdjZTA1MTRiZTk4ZjZhOTU5ZGFhYmRhOTI2ZjUK戈朗:s := sha512.New()s.Write([]byte(`hello sha world`))fmt.Println(base64.RawStdEncoding.EncodeToString(s.Sum(nil)))0T+klNJgmm9n6QbeltkniL2KtG3sD15I2M24xUBiinUqoTUmKqWATcyQfiYavkRy+vAfwT65fk6MheXAQ48qyw关于如何让 Golang 生成与 openssl 相同的哈希的任何帮助将不胜感激。提前致谢!
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

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


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


s := sha512.New()

s.Write([]byte("hello sha world\n"))

fmt.Println(hex.EncodeToString(s.Sum(nil)))

或者简单地说:


fmt.Printf("%x\n", sha512.Sum512([]byte("hello sha world\n")))

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


9c5b761a9bf8f74da84c57101669b8042b860ca5871a15c4e729758ad1dee58d562ddf8fa303ada1f3e0278fdff4af9a72f57ce0514be98f6a959daabda926f5


如果要计算 bash 中某些文本的 SHA-512 检出而不使用尾随换行符,请使用如下-n参数echo:


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

这输出与原始 Go 代码相同:


d13fa494d2609a6f67e906de96d92788bd8ab46dec0f5e48d8cdb8c540628a752aa135262aa5804dcc907e261abe4472faf01fc13eb97e4e8c85e5c0438f2acb


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信