gpt4 book ai didi

go - 将 SHA1 十六进制转换为 Base 16 整数

转载 作者:IT王子 更新时间:2023-10-29 01:26:39 52 4
gpt4 key购买 nike

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

在 Ruby 中我有:

hex = Digest::SHA1.hexdigest(str).to_i(16)
hex.to_s(32)

创建一个 SHA1 十六进制字符串,将其转换为 16 进制整数,然后再转换回 32 进制字符串。

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

最佳答案

这是一个示例代码( 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)
}

我针对这个 Ruby 脚本测试了它并且输出匹配:

require 'digest'

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

puts hex.to_s(32)

编辑:这是我的原始答案,它重现了 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)
}

关于go - 将 SHA1 十六进制转换为 Base 16 整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32545949/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com