有没有办法对给定的 Nuget 包进行校验和?

Is there a way to do a checksum for a given Nuget package?

我一直在寻找一种方法来检查文件是否未被篡改。 Nuget 包有校验和吗?

是的,NuGet 包确实有校验和。根据 this link, <packageId>.<packageVersion>.nupkg.sha512 contains the hash of the .nupkg file itself. As the packages uploaded on nuget.org started being repo-signed a while ago,还有一个名为 .nupkg.metadata 的单独文件,其中包含应用签名本身之前文件的哈希值。

然而,包含上述 2 个哈希值的文件是在 之后生成的。从 nuget.org 检索 .nupkg 文件并由 NuGet 客户端安装,这有点让首先无法检查下载的 .nupkg 是否未被篡改。

那么如何保证文件的完整性呢?通过名为 .signature.p7s 的签名文件,它本身存储在 .nupkg 文件中。使用此文件中的信息的方法是根据上面最新的 link 发布 nuget.exe verify -all <nupkg_file>(nuget.exe 可以从 here 下载)。

这是一个被篡改的文件的结果(为了测试,我使用了 CommandLineParser NuGet 包并将其 license.md 文件从 .nupkg 中删除文件):