猿问

如何在 golang 中将 sha3 哈希转换为大整数

我使用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)


}


萧十郎
浏览 233回答 2
2回答

动漫人物

sha3.New224()不能用 uint64 类型表示。有许多哈希类型 - 并且大小不同。Go标准库选择一个非常通用的接口来涵盖所有类型的哈希:https://golang.org/pkg/hash/#Hashtype 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 个接口,但哈希实现。要执行运行时检查,请执行以下操作:crc64h64, ok := h.(hash.Hash64)if ok {    fmt.Printf("64-bit: %d\n", h64.Sum64())}工作示例:https://play.golang.org/p/uLUfw0gMZka

手掌心

(有关更简单的版本,请参阅彼得的评论。将一系列字节解释为 a 与将一系列十进制数字解释为任意大数字相同。例如,要将数字 1234 转换为“数字”,请执行以下操作:big.Int从 0 开始乘以 10 = 0加 1 = 1乘以 10 = 10加 2 = 12乘以 10 = 120加 3 = 123乘以 10 = 1230加 4 = 1234这同样适用于字节。“数字”只是以256为基数,而不是以10为基数:val&nbsp;:=&nbsp;big.NewInt(0)for&nbsp;i&nbsp;:=&nbsp;0;&nbsp;i&nbsp;<&nbsp;h.Size();&nbsp;i++&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;val.Lsh(val,&nbsp;8) &nbsp;&nbsp;&nbsp;&nbsp;val.Add(val,&nbsp;big.NewInt(int64(d[i]))) }(Lsh是左移。左移 8 位与乘以 256 相同。
随时随地看视频慕课网APP

相关分类

Go
我要回答