什么是MD5、SHA-1和SHA-256哈希,如何检查它们?

在互联网旅行期间,您有时会看到MD5、SHA-1或SHA-256散列显示在下载旁边,但并不真正知道它们是什么。这些看似随机的文本字符串允许您验证下载的文件是否已损坏或被篡改。您可以使用Windows、MacOS和Linux中内置的命令来实现这一点。

哈希如何工作,以及它们如何用于数据验证

哈希是密码算法的产物,旨在产生字符串。通常这些字符串的长度是固定的,与输入数据的大小无关。请看上面的图表,您会发现“狐狸”和“红狐狸跳过蓝狗”都会产生相同长度的输出。

现在将图表中的第二个示例与第三个、第四个和第五个示例进行比较。您将看到,尽管输入数据发生了很小的变化,但生成的散列彼此都非常不同。即使有人修改了一小部分输入数据,散列也会发生巨大变化。

MD5、SHA-1和SHA-256都是不同的散列函数。软件创建者通常将下载的文件(如Linux.iso文件,甚至是Windows.exe文件)通过哈希函数运行。然后,他们在自己的网站上提供一份官方的散列列表。

这样,您就可以下载文件,然后运行哈希函数来确认您拥有真实的原始文件,并且在下载过程中它没有损坏。正如我们在上面看到的,即使对文件进行很小的更改也会极大地改变散列。

如果您有一个从非官方来源获得的文件,并且您想确认它是合法的,那么这些文件也会很有用。假设您有一个从某个地方获得的Linux.ISO文件,您想确认它没有被篡改。您可以在Linux发行版的网站上在线查找该特定ISO文件的散列。然后,您可以通过计算机上的散列函数运行它,并确认它与预期的散列值相匹配。这确认您拥有的文件与Linux发行版网站上提供下载的文件完全相同,没有任何修改。

请注意,已发现与MD5和SHA-1函数的“冲突”。这些是多个不同的文件(例如,安全文件和恶意文件),它们会产生相同的MD5或SHA-1哈希。这就是为什么在可能的情况下你应该更喜欢SHA-256的原因。

如何在任何操作系统上比较哈希函数

考虑到这一点,让我们看看如何检查您下载的文件的散列,并将其与给定的文件进行比较。以下是适用于Windows、MacOS和Linux的方法。如果对同一文件使用相同的散列函数,则散列将始终相同。您使用哪种操作系统并不重要。

<商标>Windows操作系统

多亏了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 MD5Get-FileHash C:\path\to\file.iso -Algorithm SHA1Get-FileHash C:\path\to\file.iso -Algorithm SHA256Get-FileHash C:\path\to\file.iso -Algorithm SHA384Get-FileHash C:\path\to\file.iso -Algorithm SHA512Get-FileHash C:\path\to\file.iso -Algorithm MACTripleDESGet-FileHash C:\path\to\file.iso -Algorithm RIPEMD160

将哈希函数的结果与您预期看到的结果进行比较。如果它是相同的值,则该文件没有被损坏、篡改或以其他方式从原始文件更改。

马科斯

MacOS包括用于查看不同类型散列的命令。要访问它们,请启动终端窗口。您可以在Finder>Applications>Utilities>Terminal找到它。

MD5命令显示文件的MD5哈希:

md5 /path/to/file

默认情况下,shasum命令显示文件的SHA-1散列。这意味着以下命令是相同的:

shasum /path/to/fileshasum -a 1 /path/to/file

要显示文件的SHA-256哈希,请运行以下命令:

shasum -a 256 /path/to/file

<计算机>Linux 操作系

在Linux上,访问终端并运行以下命令之一以查看文件的哈希,具体取决于您要查看的哈希类型:

md5sum /path/to/filesha1sum /path/to/filesha256sum /path/to/file

一些散列使用密码签名,以获得更高的安全性

虽然散列可以帮助您确认文件没有被篡改,但这里仍然有一种攻击途径。如果您通过HTTP而不是加密的HTTPS访问网站,攻击者可能会控制Linux发行版的网站并修改其上出现的散列,或者攻击者可能会执行中间人攻击并修改传输中的网页。

这就是为什么现代Linux发行版通常提供的不只是网页上列出的散列。他们对这些散列进行加密签名,以帮助防范可能试图修改散列的攻击者。如果您想绝对确保散列和文件没有被篡改,则需要验证加密签名以确保散列文件实际上是由Linux发行版签名的。

相关:如何验证Linux ISO的校验和并确认其未被篡改

验证加密签名是一个更复杂的过程。有关完整的说明,请阅读我们的指南以验证Linux ISO没有被篡改。

图片来源:豪尔赫·斯托尔菲(Jorge Stolfi)/维基媒体(Wikimedia)

相关文章