【发布时间】:2022-06-21 17:22:30
【问题描述】:
我查看了https://go.dev/doc/modules/gomod-ref 和https://go.dev/ref/mod#go-mod-tidy,在这两个页面上都找不到任何说明如何计算go.sum 中的校验和的文档。
go.sum 中的校验和是如何计算的?
【问题讨论】:
标签: go checksum go-modules
我查看了https://go.dev/doc/modules/gomod-ref 和https://go.dev/ref/mod#go-mod-tidy,在这两个页面上都找不到任何说明如何计算go.sum 中的校验和的文档。
go.sum 中的校验和是如何计算的?
【问题讨论】:
标签: go checksum go-modules
校验和是依赖项的哈希值。您要查找的文档是https://go.dev/ref/mod#go-sum-files。
go.sum 中的每一行都有三个由空格分隔的字段:模块路径、版本(可能以 /go.mod 结尾)和哈希。
- 模块路径是哈希所属模块的名称。
- 版本是哈希所属模块的版本。如果版本以 /go.mod 结尾,则哈希仅用于模块的 go.mod 文件;否则,哈希值用于模块的 .zip 文件中的文件。
- 哈希列由算法名称(如 h1)和 base64 编码的加密哈希组成,以冒号 (:) 分隔。目前,SHA-256 (h1) 是唯一支持的哈希算法。如果将来发现 SHA-256 中的漏洞,将添加对另一种算法(名为 h2 等)的支持。
module version hash 的示例 go.sum 行就像
github.com/go-chi/chi v1.5.4 h1:QHdzF2szwjqVV4wmByUnTcsbIg7UGaQ0tPF2t5GcAIs=
github.com/go-chi/chi v1.5.4/go.mod h1:uaf8YgoFazUOkPBG7fxPftUylNumIev9awIWOENIuEg=
【讨论】:
go.mod 文件的哈希值吗?或者它是完整包的哈希(即,包括包中的每个文件)?
go.mod文件的哈希,因为您示例中的go.mod base64编码哈希与包的base64编码哈希不匹配。跨度>