如何验证下载的文件

作者选择了 电子边界基金会作为 写给捐赠计划的一部分获得300美元的捐赠。

介绍

你可能已经下载了一些开源软件,如Linux发行ISO,并在下载链接旁边有一个链接来下载文件的支票总额. 你有没有想过那个支票总额链接是用来做什么?这个支票总额用于验证你刚刚下载的文件的完整性。

2016年2月20日,Linux Mint的网站,一个流行的Linux发行版,被黑客攻击(LINK0),并损害了安装发行版的ISO。

这种危险的安装可以在用户层面避免,如果下载了更改的ISO的人进行文件验证,看看他们下载的文件是否具有与原始文件相同的检查总和。

虽然文件验证可以表明文件可能被黑客攻击,但它通常更有用的是向用户显示他们下载的文件不完全正确或在下载过程中发生了变化。

在本教程中,您将了解文件验证是什么,为什么它很重要,以及如何使用命令行工具在各种操作系统上执行。

前提条件

对于本文,您将使用用于文件验证的命令行工具,这些工具嵌入到每个主要操作系统中。

您需要一个文件来验证,以及该文件的 MD5 和 SHA1 检查总和。

我们将使用Ubuntu安装ISO来验证我们的文件。下载64位PC(amd64, x86_64)的Ubuntu最低CDISO(https://help.ubuntu.com/community/Installation/MinimalCD)。当它下载时,请注意下载链接旁边的MD5和SHA1总和。

文件验证如何工作

文件验证,也被称为 hashing,是检查你在机器上拥有的文件与源文件相同的过程.. 当你对一个文件进行哈希时,你会留下一个 checksum,一个随机的阿尔法数字字符串具有设置长度。

生成支票总数的过程通常被称为一个单向的加密函数。当你在一个文件上执行一个支票时,它被总结成一个随机字符串,例如,假设你有一个包含1000个字符的文档。当使用MD5算法对文件进行支票时,结果的支票总数将是32个随机字符。如果你要对2000个字符长的文件进行支票,结果的MD5支票总数仍然是32个字符,即使源文件只有10个字符,MD5支票总数仍然是32个随机字符。

每当你在同一个文件上执行哈希时,你将始终在哈希中获得相同的字符串,只要该文件的每一个小块都没有改变,但即使有一件事是不同的,例如文件中额外的空间,检查总数将完全不同。

您通常会看到两种类型的检查总数用于文件验证, MD5SHA

MD5算法在加密世界受到很多批评,因为它很容易被黑客攻击,但这在文件验证方面并不是一个问题。当谈到验证文件的完整性时,加密工具的弱点并不重要。

最近,SHA对检查总数的哈希算法的使用增加了,因为它是一些现代加密中使用的哈希算法,但与MD5不同,SHA有不同的版本,并且在检查时使用正确的版本很重要。该版本被识别为一个数字,如1,2,3,或由SHA连续运行的次数,如256,384或512。您使用的检查总数应该指定使用哪个版本的SHA。如果网站只指定一个具有SHA标签的哈希,没有数字,那么可以安全地假设他们正在使用SHA1。

对于文件验证的目的,这两种方法均为同等有效,尽管算法不同,但两者都会返回具有设置长度的随机字符串,尽管MD5字符串比任何SHA字符串都短。

<$>[注] :有时PGP/GPG签名也用于文件验证目的。这些类型的签名不太常见,更需要检查。它们要求你下载支票,网站的公共密钥,并且在你的系统上已经设置了gpg来执行检查。

检查下载的文件上的哈希提供了两种不同的保证,这两者都是值得的。首先,通过匹配的检查金额,您可以确定您刚刚下载的文件与源相同,并且没有被第三方改变。

现在你知道什么是支票和为什么你应该对你的文件进行检查,让我们来看看如何为你的操作系统。

在 Linux 上执行文件验证

大多数Linux发行版都有每个哈希算法的命令行工具。工具名称的模式是HASH-TYPE加上sum一词,所以用MD5进行哈希,程序名称是md5sum。用SHA 256进行哈希,命令是sha256sum。如果您不确定具体的名称是什么,请键入哈希算法名称,然后按两次键,大多数发行版将显示以该算法名称开始的所有命令。

我们将使用MD5哈希算法进行第一次检查,执行md5sum命令,并将其传送到您想要哈希的文件的路径:

1md5sum mini.iso

结果将看起来像这样的东西:

1[secondary_label Output]
28388f7232b400bdc80279668847f90da mini.iso

这个随机字符串,从8388f开始,是检查总和,这就是你需要与下载页面提供的检查总和进行比较的。

由于任何对文件的更改都会导致完全不同的检查总和,为了节省时间,只需检查前几个字符,最后几个字符与源相同,而不是每个字符。

例如,如果您想快速验证mini.iso的支票总数是否匹配,请验证两个支票总数都以8388f开始,并以f90da结束。

如果你想百分之百确定,只需从网站上复制并粘贴检查总和,在本地检查输出下查看每个字符是否排列:

1[secondary_label Output]
28388f7232b400bdc80279668847f90da mini.iso
38388f7232b400bdc80279668847f90da

现在让我们来看看检查SHA哈希。最常见的SHA哈希命令是sha1sumsha256sum

1sha1sum mini.iso

结果将类似于此:

1[secondary_label Output]
2cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a mini.iso

将结果值与网页上的值进行比较,以验证它们匹配。

现在让我们看看在macOS上验证文件。

在 macOS 上执行文件验证

与 Linux 不同,macOS 只有两个哈希命令(‘md5’和‘shasum’),而不是每个算法的一个。

尽管应用程序和操作系统不同,但这些工具的哈希在每个操作系统上都是相同的。

由于md5是一个独立的算法,它在macOS上是它自己的命令,执行md5命令,将其传递到您想要检查的文件的路径:

1md5 mini.iso

结果将是这样的:

1[secondary_label Output]
2MD5 (mini.iso) = 8388f7232b400bdc80279668847f90da

正如你所看到的,macOS上的输出并不完全与Linux上的输出相同,但它仍然显示了文件名和32个字符的随机字符串。

现在让我们看看验证 SHA 检查总数。macOS 有一个用于执行任何 SHA 检查的实用程序,名为shasum

執行下列命令,使用「-a」旗號指定 SHA1:

1shasum -a 1 mini.iso

结果将是这样的:

1[secondary_label Output]
2cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a mini.iso

将此值与原始文件的 SHA1 哈希进行比较.如果它们不匹配,您应该尝试下载该文件并再次检查其哈希。

如果您需要执行 SHA 256 检查,该命令将是shasum -a 256 mini.iso

接下来,让我们看看在 Windows 上验证文件。

在 Windows 上执行文件验证

Windows 7 和更高版本包括可以处理所有哈希需求的certutil应用程序. 输出看起来与 Linux 和 macOS 非常不同,但检查金额将是相同的,同样有效的。

该命令的格式为certutil -hashfile path/to/file ALGORITHM

命令certutil不是案例敏感的,所以CertUtil,certUtilcertutil都是有效的,但是算法是案例敏感的,这意味着md5不会起作用,你需要键入MD5

若要验证mini.iso文件的 MD5 哈希,请执行以下命令:

1certutil -hashfile mini.iso MD5

结果将是这样的:

1[secondary_label Output]
2MD5 hash of file mini.iso:
38388f7232b400bdc80279668847f90da
4CertUtil: -hashfile command completed successfully.

对于SHA算法,我们将执行相同的命令,但我们将使用SHA1而不是MD5

因此,我们使用SHASHA1用于SHA1哈希,或SHA256,如果我们需要SHA256算法。

1certutil -hashfile mini.iso SHA1

结果将是这样的:

1[secondary_label Output]
2SHA1 hash of mini.iso:
3cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a
4CertUtil: -hashfile command completed successfully.

将结果的哈希与下载页面的哈希进行比较,以确保它们匹配。

结论

无论您是确保您刚刚下载的文件在下载过程中没有被破坏,还是验证一个恶意的人没有攻击下载服务器,检查文件的哈希需要额外的时间都是值得的。

如果命令行对简单的文件验证来说有点不方便,那么这里有几个 基于GUI的工具,您可以使用:

Published At
Categories with 技术
comments powered by Disqus