在Golang中如何将SHA3哈希值转换为big.Int类型大整数
问题解答
完全可以实现,SHA3算法生成的哈希值本质是固定长度的字节序列,直接使用math/big包提供的SetBytes方法就可以将字节格式的哈希值转换为big.Int类型的整数。
原有代码错误说明
- 代码中的
h是sha3.New244()返回的hash.Hash接口实例,属于哈希计算的工具对象,不是最终生成的哈希值,无法直接转换为int64 - 语法错误:字符串转字节数组的写法应为
[]byte(chall),不是byte[](chall) h.Write()方法仅接收[]byte类型的入参,不能直接传入字符串类型的challh.Sum(d)用法错误:该方法会将计算得到的哈希值追加到参数切片的末尾,传入长度为16的切片后得到的结果不是纯哈希值,正确用法是传入nil直接返回计算好的哈希字节切片- 原有代码重复调用了两次
h.Write写入相同内容,会导致最终计算的哈希值和预期不符
正确实现代码
package main import ( "fmt" "math/big" "golang.org/x/crypto/sha3" ) func main() { chall := "hello world" // 字符串转字节数组 b := []byte(chall) // 初始化SHA3 244哈希计算对象 h := sha3.New244() // 写入待计算的字节内容 h.Write(b) // 计算得到哈希字节序列 hashBytes := h.Sum(nil) // 将字节序列转换为big.Int类型,默认使用大端序,符合通用场景需求 val := new(big.Int).SetBytes(hashBytes) fmt.Println(val) }
内容的提问来源于stack exchange,提问作者enimert
相关产品推荐
相关产品推荐

