You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Golang中如何将SHA3哈希值转换为big.Int类型大整数

问题解答

完全可以实现,SHA3算法生成的哈希值本质是固定长度的字节序列,直接使用math/big包提供的SetBytes方法就可以将字节格式的哈希值转换为big.Int类型的整数。


原有代码错误说明

  • 代码中的h是sha3.New244()返回的hash.Hash接口实例,属于哈希计算的工具对象,不是最终生成的哈希值,无法直接转换为int64
  • 语法错误:字符串转字节数组的写法应为[]byte(chall),不是byte[](chall)
  • h.Write()方法仅接收[]byte类型的入参,不能直接传入字符串类型的chall
  • h.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 10:27:02