【问题标题】:How are the checksums in go.sum computed?go.sum 中的校验和是如何计算的?
【发布时间】:2022-06-21 17:22:30
【问题描述】:

我查看了https://go.dev/doc/modules/gomod-refhttps://go.dev/ref/mod#go-mod-tidy,在这两个页面上都找不到任何说明如何计算go.sum 中的校验和的文档。

go.sum 中的校验和是如何计算的?

【问题讨论】:

    标签: go checksum go-modules


    【解决方案1】:

    校验和是依赖项的哈希值。您要查找的文档是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编码哈希不匹配。跨度>
    • @ShaneBishop 在我引用的文件的第二点中说:如果版本以 /go.mod 结尾,则哈希仅用于模块的 go.mod 文件;否则,哈希用于模块的 .zip 文件中的文件。
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2018-11-12
    • 2016-10-08
    相关资源
    最近更新 更多