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

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

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

Go
幕布斯6054654 2021-11-08 15:29:30
我需要一些帮助将算法从 Ruby 移植到 Go。在 Ruby 中,我有:hex = Digest::SHA1.hexdigest(str).to_i(16)hex.to_s(32)它创建一个 SHA1 十六进制字符串,将其转换为基数为 16 的整数,然后再转换为基数为 32 的字符串。我如何在 Go 中实现相同的目标?
查看完整描述

1 回答

?
忽然笑

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

这是一个示例代码(游乐场: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 脚本中复制了每一步,但其中两个是不必要的(游乐场: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)

}


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 262 浏览
慕课专栏
更多

添加回答

举报

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