这些字符串是否是验证文件校验和密钥的正确输出?

这些字符串是否是验证文件校验和密钥的正确输出?

根据他们的建议,我在安装从 Apache.org 网站下载的 Netbeans 之前尝试验证文件的完整性。我无法验证我是否正确使用了工具和/或如何正确读取结果。

我使用了一个由 blqsoftware 开发的名为 File Checksum Utility 的工具,它是从 SourceForge.net 网站下载的。我认为它的说明确实不够详细。我不确定结果如何,但效果并不理想,所以我在 Windows 10 中使用了第二个工具 - 命令提示符下的 certUtil -hashfile。每次它都声称命令成功完成,表明该文件的 SHA1 哈希值。

这是我使用 certUtil 命令及其结果的示例:

C:\WINDOWS\system32>certutil -hashfile C:\Users\admin\Downloads\netBeans\apache-netbeans-12.0-bin-windows-x64.exe C:\Users\admin\Downloads\netBeans\apache-netbeans-12.0-bin-windows-x64.exe 的 SHA1 哈希值:b9b94a787f6da1498d542f9da2595fdd0914ecc0 CertUtil:-hashfile 命令已成功完成。

这些是下载的 netbeans 可执行文件以及我复制 PGP ASC/signature 和 SHA-512 内容的 .txt 文件的结果:

b9b94a787f6da1498d542f9da2595fdd0914ecc0

099223c7e088271f1e9753665b891eed67a89e59

f29257fa61656c3bd9a00194299cde6f554cf18b

63ab3ef3d58a8dcc310a1a4b11492885314cf17e

baa1a27b53862cbb95ae79e3c6cc5049ce251aab

第一个来自 netbeans 可执行文件,其他的是从 Apache 链接复制的密钥生成的结果。

如果这些结果合法,那么现在该怎么办?尝试再次下载 netbeans?

答案1

每次它都声称命令成功完成,表明文件的 SHA1 哈希值。

您需要在 certUtil 命令末尾包含选项“SHA512”,以便它提供 SHA512 哈希而不是默认的 SHA1:

certutil -hashfile C:\Users\admin\Downloads\netBeans\apache-netbeans-12.0-bin-windows-x64.exe SHA512

这将生成文件的 SHA512 哈希值,您可以将其与Apache 站点

525d61838c0cb82a6234bff1984b9886324eccdb0320875c639889e64299b1b621d01ca524ff0a770ac65ef05aad367722977066cf017369932c10f55992e90f ./Apache-NetBeans-12.0-bin-windows-x64.exe

如果两个值匹配,您可以合理地确信下载的文件的完整性。

答案2

我在 Windows 10 powershell 中找到了类似的实用程序;Get -FileHash。Netbeans 不想安装,因为它找不到任何已安装的 JDK(我以为 Netbeans 应用程序包含它),所以我从 Oracle 的页面下载了 JDK 15.0,他们有一个密钥,我也下载了它。他们使用其他算法之一,但 Get -FileHash 有效,二进制校验和匹配,所以至少我现在知道好的结果(好的文件)是什么样的。我在 netbeans 可执行文件及其关联的密钥上使用了 Get -FileHash,但仍然没有运气。Apache 似乎正在他们的网站上进行一些重组/改组,所以也许这是问题的一部分?

为了好玩,我将回去尝试使用 JDK 的 certUtil 来看看它会产生什么结果。

感谢 Fuzzy Drawings 的建议。

这是 JDK 的结果。中间的字符串是使用 Powershell 的 Get -FileHash 命令得到的。最后一个是使用 MSDOS/命令控制台的 certUtil -Hashfile 得到的。

sha256:736cd1e22378adf5fc8664c9e9245f4793ae0f8fe43dd848ca361ee5d71f5553

    736CD1E22378ADF5FC8664C9E9245F4793AE0F8FE43DD848CA361EE5D71F5553

    736cd1e22378adf5fc8664c9e9245f4793ae0f8fe43dd848ca361ee5d71f5553

答案3

我在 Windows 10 中使用了第二个工具 - 命令提示符下的 certUtil -hashfile。每次它都声称命令成功完成,表明该文件的 SHA1 哈希值

哈希工具本身无法验证任何事情。当以这种方式使用时,它们总是会显示成功,因为它们唯一做的事情就是算法产生给定输入的哈希值(不会失败),但它们没有任何比较它反对——无法知道该哈希是否与您的期望相匹配。

当网站希望您使用 SHA1 或其他哈希值来验证下载时,它实际上会在下载链接旁边发布预期的哈希值 - 您需要将生成的哈希值的每个数字与已发布的哈希值进行比较。

有些工具可以自动比较哈希值,但前提是给定文件(原始文件和哈希列表 - 例如sha1sums.txt文件很常见)。Windows 的 Certutil 无法执行此操作。


但是,当网站通过 PGP 签名向您提供验证时,散列程序就完全不适合这项工作了。仅仅对 .asc 文件进行散列并不能告诉您有关 .exe 文件的任何有用信息,反之亦然。

(如果您手动复制粘贴内容,它可能甚至不会告诉您有关 .asc 文件本身的任何信息。请记住,哈希工具会计算每个字节 - 这里的额外空格或那里的换行符都会导致不同的哈希值。)

要处理签名,您需要使用能够理解特定签名格式的程序 - 对于 PGP .asc 签名和密钥文件,您需要兼容 PGP 的软件,例如 GnuPG (Gpg4win)。它实际上会解释 .asc 或 .sig 文件,执行自己的哈希处理,并验证 .exe 与签名它的 PGP 密钥之间的数字签名关系。

gpg --verify netbeans.asc netbeans.exe

(但是,这些工具只能告诉你密钥 X 确实签署了文件 Y,但它们仍然不知道密钥 X 是否是理应签署此文件。这仍然是您的工作,需要以某种方式进行验证。同样,该网站通常会在下载链接附近的某个地方发布官方 PGP 密钥。)

答案4

对于那些想要更轻松地验证的人来说,你可以尝试在线校验和工具https://md5-checksum.com,支持md5,sha256,sha1。

相关内容