Scala SHA512 哈希的 Go 等价物是什么?

ALH*_*ALH 1 hash cryptography scala go sha512

我们Scala有一部分代码对 SHA512 中的字符串进行哈希处理,然后按Hexadecimal格式填充该字符串:

String.format("%032x", new BigInteger(1, MessageDigest.getInstance("SHA-512").digest("MyStringToBeHashed".getBytes("UTF-8"))))
Run Code Online (Sandbox Code Playgroud)

我使用 crypto 包在 Go 中散列字符串:

package main

import (
        "crypto/sha512"
        "encoding/base64"
)

func main() {
        hasher := sha512.New()
        hasher.Write([]byte("MyStringToBeHashed"))
        sha := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
        sha = fmt.Sprintf("%032x", sha)
        println(sha)
}
Run Code Online (Sandbox Code Playgroud)

我得到Scala以下输出:

b0bcb1263862e574e5c9bcb88a3a14884625613410bac4f0be3e3b601a6dee78f5635d0f7b6eb19ba5a1d80142d9ff2678946331874c998226b16e7ff48e53e5
Run Code Online (Sandbox Code Playgroud)

但在Go

734c79784a6a68693558546c79627934696a6f556945596c5954515175735477766a343759427074376e6a3159313050653236786d365768324146433266386d654a526a4d59644d6d59496d7357355f3949355435513d3d
Run Code Online (Sandbox Code Playgroud)

Ste*_*ich 5

附加的base64编码是错误的。您要么想要将哈希显示为base64(即base64(hash)),要么想要将哈希显示为十六进制字符串(即hex(hash)) - 但您所做的是将base64编码的哈希显示为十六进制字符串(即hex(base64(hash)))。只需这样做:

    sha := fmt.Sprintf("%032x", hasher.Sum(nil))
Run Code Online (Sandbox Code Playgroud)

  • 或者使用导入的编码/十六进制“hex.EncodeToString(hasher.Sum(nil))” (2认同)