亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 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 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號