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

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

如何在 golang 中將 sha3 哈希轉換為大整數

如何在 golang 中將 sha3 哈希轉換為大整數

Go
蕭十郎 2022-08-30 21:58:12
我使用sha3生成了一個哈希值,我需要將其轉換為大值。整型值。可能嗎?或者有沒有一種方法可以獲得哈希的整數值?下面的代碼引發無法轉換類型哈希的錯誤。鍵入 int64 的哈希值:package main import ("math/big""golang.org/x/crypto/sha3""fmt")func main(){  chall := "hello word"  b := byte[](chall)  h := sha3.New244()  h.Write(chall)  h.Write(b)  d := make([]byte, 16)  h.Sum(d)  val := big.NewInt(int64(h))  fmt.Println(val)}
查看完整描述

2 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

sha3.New224()不能用 uint64 類型表示。


有許多哈希類型 - 并且大小不同。Go標準庫選擇一個非常通用的接口來涵蓋所有類型的哈希:https://golang.org/pkg/hash/#Hash


type Hash interface {

    io.Writer

    Sum(b []byte) []byte

    Reset()

    Size() int

    BlockSize() int

}

話雖如此,一些Go哈希實現可以選擇性地包括額外的方法,如哈希。哈希64:


type Hash64 interface {

    Hash

    Sum64() uint64

}

其他人可以實現編碼。BinaryMarshaler:


type BinaryMarshaler interface {

    MarshalBinary() (data []byte, err error)

}

可以用來保留哈希狀態。


sha3.New224()不實現上述 2 個接口,但哈希實現。要執行運行時檢查,請執行以下操作:crc64


h64, ok := h.(hash.Hash64)

if ok {

    fmt.Printf("64-bit: %d\n", h64.Sum64())

}

工作示例:https://play.golang.org/p/uLUfw0gMZka


查看完整回答
反對 回復 2022-08-30
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

(有關更簡單的版本,請參閱彼得的評論。

將一系列字節解釋為 a 與將一系列十進制數字解釋為任意大數字相同。例如,要將數字 1234 轉換為“數字”,請執行以下操作:big.Int

  • 從 0 開始

  • 乘以 10 = 0

  • 加 1 = 1

  • 乘以 10 = 10

  • 加 2 = 12

  • 乘以 10 = 120

  • 加 3 = 123

  • 乘以 10 = 1230

  • 加 4 = 1234

這同樣適用于字節?!皵底帧敝皇且?56為基數,而不是以10為基數:

val := big.NewInt(0)for i := 0; i < h.Size(); i++ {
    val.Lsh(val, 8)
    val.Add(val, big.NewInt(int64(d[i])))
}

(Lsh是左移。左移 8 位與乘以 256 相同。


查看完整回答
反對 回復 2022-08-30
  • 2 回答
  • 0 關注
  • 281 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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