【问题标题】:How to verify go.sum module hashes from Bash?如何验证来自 Bash 的 go.sum 模块哈希?
【发布时间】:2020-03-02 17:28:30
【问题描述】:

主要出于求知欲,我想验证 go.sum 哈希值,以更好地了解该过程的工作原理。但我无法验证哈希值。我做错了什么?

使用Trillian v1.3.0

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=

【问题讨论】:

    标签: go-modules


    【解决方案1】:

    Golang 模块校验和具有特殊逻辑,可以基于 SHA256 计算 Hash,最终编码为 Base64。

    仅使用 Bash 脚本很难验证 go.sum

    看看:https://github.com/vikyd/go-checksum

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 2022-01-23
      • 2022-01-06
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多