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)
}
- 1 回答
- 0 關注
- 326 瀏覽
添加回答
舉報