【问题标题】:cryptojs and golang give different sha3 hash valuescryptojs 和 golang 给出不同的 sha3 哈希值
【发布时间】:2019-10-06 20:30:37
【问题描述】:

我正在尝试在 JS 中生成 sha3-512 哈希并在 golang 服务器中检查它。然而,cryptoJS 产生的哈希值与 golang 不同。

CryptoJS:

CryptoJS.algo.SHA3.create().update("foo").finalize().toString(CryptoJS.enc.Hex)

输出:

1597842aac52bc9d13fe249d808afbf44da13524759477404c3592ee331173e89fe1cbf21a7e4360990d565fad4643cdb209d80fa41a91dea97e665022c92135


Golang:

hex.EncodeToString(crypto.SHA3_512.New().Sum([]byte("foo")))

输出:

666f6fa69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26

我希望这些哈希值相等,但它们不是

【问题讨论】:

  • 很有趣,我用 Python 的hashlib.sha3_512(b“foo“).hexdigest() 得到了第三个值...
  • 假设你的 Go 包实现了 hash.Hash 你必须在 Sum 之前调用 Write(将哈希输入传递给 Sum 是无意义的)。
  • FWIW 试图做h.Sum(data) 是一个非常常见的错误。我已经在 2 家公司的 3 个不同的代码库中修复了相同的错误。

标签: javascript go cryptojs sha-3


【解决方案1】:

我不知道你在使用谁的 sha3 包。这是我通过this code 得到的:

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

【讨论】:

    【解决方案2】:

    显然,您的输出是 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(“”)是“A69F73CCA23A9AC5C8B567DC185A756C80A65B212123AF1DCD23AC53D3E30194C3AC55853ADCD26”从Examples of SHA-3 variants

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2020-07-18
      • 2021-08-09
      • 2023-02-23
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      相关资源
      最近更新 更多