Golang - 将SHA1 Hex转换为Base 16 Integer

Zoh*_*rad 5 hex go

我需要一些帮助将一个算法从Ruby移植到Go.

在Ruby中我有:

hex = Digest::SHA1.hexdigest(str).to_i(16)
hex.to_s(32)
Run Code Online (Sandbox Code Playgroud)

这将创建一个SHA1十六进制字符串,将其转换为基数为16的整数,然后返回到基数为32的字符串.

如何在Go中实现同样的目标?

Hec*_*orJ 7

这是一个示例代码(playground:https://play.golang.org/p/izBIq97-0S):

package main

import (
    "crypto/sha1"
    "encoding/base32"
    "fmt"
    "strings"
)

func main() {
    // Input
    exampleString := "example"

    // SHA1 hash
    hash := sha1.New()
    hash.Write([]byte(exampleString))
    hashBytes := hash.Sum(nil)

    // Conversion to base32
    base32str := strings.ToLower(base32.HexEncoding.EncodeToString(hashBytes))

    fmt.Println(base32str)
}
Run Code Online (Sandbox Code Playgroud)

我测试了这个Ruby脚本和输出匹配:

require 'digest'

str = "example"
hex = Digest::SHA1.hexdigest(str).to_i(16)

puts hex.to_s(32)
Run Code Online (Sandbox Code Playgroud)

编辑:这是我的原始答案,它重现了ruby脚本中的每一步,但其中两个是不必要的(playground:https://play.golang.org/p/tyQt3ftb1j):

package main

import (
    "crypto/sha1"
    "encoding/base32"
    "encoding/hex"
    "fmt"
    "math/big"
    "strings"
)

func main() {
    // Input
    exampleString := "example"

    // SHA1 hash
    hash := sha1.New()
    hash.Write([]byte(exampleString))
    hashBytes := hash.Sum(nil)

    // Hexadecimal conversion
    hexSha1 := hex.EncodeToString(hashBytes)

    // Integer base16 conversion
    intBase16, success := new(big.Int).SetString(hexSha1, 16)
    if !success {
        panic("Failed parsing big Int from hex")
    }

    // Conversion to base32
    base32str := strings.ToLower(base32.HexEncoding.EncodeToString(intBase16.Bytes()))

    fmt.Println(base32str)
}
Run Code Online (Sandbox Code Playgroud)