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

cryptojs 和 golang 给出不同的 sha3 哈希值

cryptojs 和 golang 给出不同的 sha3 哈希值

Go
汪汪一只猫 2023-07-26 19:47:13
我正在尝试在 JS 中生成 sha3-512 哈希并在 golang 服务器中检查它。然而,cryptoJS 生成的哈希值与 golang 不同。加密JS:CryptoJS.algo.SHA3.create().update("foo").finalize().toString(CryptoJS.enc.Hex)输出:1597842aac52bc9d13fe249d808afbf44da13524759477404c3592ee331173e89fe1cbf21a7e4360990d565fad4643cdb209d80fa41a91dea97e665022c92135戈兰:hex.EncodeToString(crypto.SHA3_512.New().Sum([]byte("foo")))输出:666f6fa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26我希望这些哈希值相等,但事实并非如此
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

我不知道你用的是谁的 sha3 包。这是我通过这段代码得到的结果:

package main


import (

    "fmt"

    "golang.org/x/crypto/sha3"

)


func main() {

    h := sha3.New512()

    h.Write([]byte("foo"))

    sum := h.Sum(nil)

    fmt.Printf("hash = %x\n", sum)

}

hash = 4bca2b137edc580fe50a88983ef860ebaca36c857b1f492839d6d7392452a63c82cbebc68e3b70a2a1480b4bb5d437a7cba6ecf9d89f9ff3ccd14cd6146ea7e7


与Python3比较:


>>> import hashlib

>>> print(hashlib.sha3_512(b"foo").hexdigest())

打印:


4bca2b137edc580fe50a88983ef860ebaca36c857b1f492839d6d7392452a63c82cbebc68e3b70a2a1480b4bb5d437a7cba6ecf9d89f9ff3ccd14cd6146ea7e7


查看完整回答
反对 回复 2023-07-26
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

显然,您的输出是 134 宽度,应该是 128 宽度。

让我们解码您的输出:

bytes, _ := hex.DecodeString("666f6fa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26")
fmt.Printf("%s\n", bytes)

我们发现输出是foo��s̢:��ȵg�Zun�ɂO�XY����G\���:���L��@,:�X������u��(�&.

这意味着您实际上所做的是输出:

“foo”+sha3(“”)

其中 sha3_512("") 是 "a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e30175 8586281dcd26”来自SHA-3 变体示例。


查看完整回答
反对 回复 2023-07-26
  • 2 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

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