在互联网旅行期间,有时您会看到MD5,SHA-1或SHA-256哈希显示在下载的旁边,但不知道它们是什么。 这些看似随机的文本字符串允许您验证下载的文件没有损坏或篡改。 您可以使用Windows,macOS和Linux中内置的命令来实现此目的。
哈希是如何工作的,以及如何将它们用于数据验证
哈希是用于产生字符串的加密算法的产物。 通常这些字符串具有固定长度,而不考虑输入数据的大小。 看看上面的图表,你会看到“狐狸”和“红狐狸跳过蓝狗”产生相同的长度输出。
现在将图表中的第二个例子与第三,第四和第五个比较。 你会看到,尽管输入数据有一个非常小的变化,生成的哈希值彼此非常不同。 即使有人修改了一小段输入数据,哈希值也会发生巨大变化。
MD5,SHA-1和SHA-256都是不同的散列函数。 软件创建者经常采用文件下载 - 例如Linux .iso文件,甚至Windows .exe文件 - 并通过哈希函数运行它。 然后他们在他们的网站上提供一个哈希的官方列表。
这样,你可以下载文件,然后运行哈希函数,以确认你有真正的原始文件,它在下载过程中没有被破坏或恶意篡改。 正如我们上面所看到的,即使文件的一个小的改变将会大大改变哈希。
如果您有来自非正式来源的文件,并且您想要确认它是合法的,这些也可以是有用的。 让我们说你有一个Linux .ISO文件,你从某个地方,你想确认它没有被篡改。 您可以在Linux发行版的网站上在线查找该特定ISO文件的哈希值。 然后,您可以通过计算机上的哈希函数运行它,并确认它匹配您期望它具有的哈希值。 这确认您所拥有的文件是在Linux发行版网站上提供的完全相同的文件,无需任何修改。
如何比较任何操作系统上的哈希函数
考虑到这一点,让我们来看看如何检查您下载的文件的哈希,并将其与给定的文件进行比较。 这里有Windows,macOS和Linux的方法。 如果在同一个文件上使用相同的散列函数,散列将总是相同的。 使用哪个操作系统无关紧要。
视窗
由于PowerShell,此过程可能在Windows上没有任何第三方软件。
要开始,请通过在“开始”菜单中启动“Windows PowerShell”快捷方式来打开PowerShell窗口。
运行以下命令,用“C:\ path \ to \ file.iso”替换要查看其哈希的任何文件的路径:
Get-FileHash C:\ path \ to \ file.iso
生成文件的哈希值需要一些时间,具体取决于文件的大小,您使用的算法以及文件所在驱动器的速度。
默认情况下,命令将显示一个文件的SHA-256哈希值。 但是,如果需要MD5,SHA-1或其他类型的散列,则可以指定要使用的散列算法。
运行以下命令之一以指定不同的散列算法:
Get-FileHash C:\ path \ to \ file.iso -Algorithm MD5
Get-FileHash C:\ path \ to \ file.iso -Algorithm SHA1
Get-FileHash C:\ path \ to \ file.iso -Algorithm SHA256
Get-FileHash C:\ path \ to \ file.iso -Algorithm SHA384
Get-FileHash C:\ path \ to \ file.iso -Algorithm SHA512
Get-FileHash C:\ path \ to \ file.iso -Algorithm MACTripleDES
Get-FileHash C:\ path \ to \ file.iso -Algorithm RIPEMD160
将散列函数的结果与预期看到的结果进行比较。 如果它是相同的值,该文件没有被损坏,篡改或以其他方式从原来的改变。
macOS
macOS包括用于查看不同类型的散列的命令。 要访问它们,请启动终端窗口。 您可以在Finder>应用程序>实用程序>终端中找到它。
md5
命令显示文件的MD5哈希值:
md5 / path / to / file
默认情况下, shasum
命令显示文件的SHA-1散列。 这意味着以下命令是相同的:
shasum / path / to / file
shasum -a 1 / path / to / file
要显示文件的SHA-256哈希值,请运行以下命令:
shasum -a 256 / path / to / file
Linux
在Linux上,访问终端并运行以下命令之一以查看文件的哈希值,具体取决于要查看的哈希类型:
md5sum / path / to / file
sha1sum / path / to / file
sha256sum / path / to / file
一些哈希是加密签名的更安全
虽然哈希可以帮助您确认文件没有被篡改,但仍有一个攻击的方式在这里。 攻击者可以获得对Linux发行版网站的控制权,修改出现在其上的哈希值,或者攻击者可以执行中间人攻击并修改运行中的网页,如果您通过HTTP访问网站,而不是加密HTTPS 。
这就是为什么现代Linux发行版经常提供的网页上列出的哈希值。 他们加密签名这些哈希,以帮助保护攻击者可能尝试修改哈希。 如果您想要绝对确保哈希和文件未被篡改,您将需要验证加密签名以确保哈希文件实际上由Linux发行版签名。
验证加密签名是一个更复杂的过程。 阅读我们的指南,验证Linux ISO没有被篡改完整的说明。
图片来源: Jorge Stolfi / Wikimedia