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

如何手动生成与go.sum条目匹配的SHA256校验和?

解决手动生成go.sum哈希值的问题

核心逻辑说明

go.sum中的h1:哈希并非直接对文件内容做SHA256,而是遵循Go模块的校验和计算规则,分两种场景处理:


1. 生成模块整体的哈希(对应无/go.mod后缀的条目)

针对github.com/foo/bar v0.0.0-20231129062549-b7ab892f9094的哈希,Go的计算逻辑是:

  • 遍历模块目录下所有非隐藏文件,按文件名字典序排序
  • 对每个文件,拼接regular $文件名\n(可执行文件替换为executable)+ 文件原始内容
  • 将所有拼接后的内容合并,计算SHA256哈希,再转成Base64编码,前缀加上h1:就是go.sum里的值

手动生成命令

进入模块目录后执行:

cd ~/go/pkg/mod/github.com/foo/bar@v0.0.0-20231129062549-b7ab892f9094/
find . -type f -not -name ".*" | sort | while read f; do
    echo -n "regular ${f#./}"$'\n'
    cat "$f"
done | sha256sum | awk '{print $1}' | xxd -r -p | base64

输出的Base64字符串前加上h1:即可匹配go.sum中的对应条目。


2. 生成go.mod单独的哈希(对应/go.mod后缀的条目)

针对github.com/foo/bar@v0.0.0-20231129062549-b7ab892f9094/go.mod的哈希,只需对go.mod文件内容计算SHA256后转Base64,注意文件换行符必须是LF(避免Windows下CRLF格式干扰):

手动生成命令

cat ~/go/pkg/mod/github.com/foo/bar@v0.0.0-20231129062549-b7ab892f9094/go.mod | sha256sum | awk '{print $1}' | xxd -r -p | base64

同样在结果前加h1:就是目标哈希值。


你的尝试失败的原因

  • 第一次尝试:没有按规则添加文件元信息(文件模式、路径),也未对文件排序,直接拼接所有文件内容,输入与Go的计算数据源完全不符
  • 第二次尝试:仅计算了单个文件的哈希,但模块整体哈希是基于所有文件的组合内容,结果自然不匹配

内容的提问来源于stack exchange,提问作者Isaac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:00:58