主要出于好奇心,我想验证go.sum
哈希值以更好地了解该过程的工作原理。但是我无法验证哈希。我在做什么错了?
MOD=github.com/google/trillian
REL=v1.3.0
和
curl --silent https://sum.golang.org/lookup/${MOD}@${REL}
55144
github.com/google/trillian v1.3.0 h1:Mr/GnBzXQvowTJVaWPox/mMcYf2L1hJKNBAOffNBLlE=
github.com/google/trillian v1.3.0/go.mod h1:qYuTstG3eXZCOnvIfE8IeoEQDrjpm1dkfydVTBiSyx8=
go.sum database tree
156802
lFayLBRYOtnUSyDaIvmpVKydST+NdNWNkfSVehq3Ty8=
— sum.golang.org Az3grsd5k3D+TW56dDtJTGqaF+x6L16iYOWvSoO/T/M/UGpCGaJgDfGKvco2qJuo1Hk/j0RUxpndYL68xfrGiWacAAk=
放在旁边:有没有办法让API返回JSON?不允许使用参数。
IIUC Mr/GnBzXQvowTJVaWPox/mMcYf2L1hJKNBAOffNBLlE=
应该是压缩模块目录,进行哈希处理然后对它进行base64编码的结果,但这不是:
zip -r - "${GOPATH}/pkg/mod/${MOD}@${REL}" | \
sha256sum | \
head --bytes=64 | \
base64 --wrap=0
MzQxNjhkNTQzZTk0MjFjY2FjN2NjYTljMzczZDgwYmE0MzE1ZjY4YzY3OWYzNzZjNTc4OTFiMTRlNzA0NjAwMQ==
如果我从哈希开始倒退,它似乎是二进制编码的。因此,我尝试了openssl dgst -sha256 -binary
,但这也不能为我提供正确的哈希值:
zip -r - "${GOPATH}/pkg/mod/${MOD}@${REL}" | \
openssl dgst -sha256 -binary | \
base64
NBaNVD6UIcysfMqcNz2AukMV9oxnnzdsV4kbFOcEYAE=
答案 0 :(得分:0)
Golang模块的校验和具有特殊的逻辑,可以基于SHA256计算哈希,最终编码为Base64。