从 Internet 下载各种可执行文件或 zip 文件时,我从未使用过校验和。我知道它用于检查一致性并增加一些安全性。但是,当您从 Apache 或 Microsoft 等受人尊敬的项目下载时,是否有必要。我们中有多少人真正使用校验和或哈希码来验证内容?
仅供参考,如果我偏离 StackOverflow 可接受的内容太远,请告诉我。
当下载完整性至关重要的文件时(例如linux发行版的iso),我倾向于md5sum下载以防万一。
来源可能是可信的,但您永远不知道您自己的 NIC 硬件何时开始出现故障。
另一个用途是验证您已经拥有的文件是否与可从可信来源下载的文件相同(即未更改、未损坏和最新)。
如果发生这种情况
这样您就可以检查文件的完整性。我用它所有的时间。您基本上只需在文件上运行一些将产生 MD5 校验和或使用任何散列方法的程序,然后查看两个校验和是否匹配。如果不是,那么文件是不同的。但是,请注意,可能有两个文件产生相同的校验和,但是比较两个相同大小的文件时遇到这种情况的可能性非常低,除非您正在设计示例。
这非常有用。我最近发现了一个 CD 刻录程序的错误;我一直对特定计算机上的特定文件有问题。最后我只是比较了CD文件和原电脑上的文件的校验和,它们不同,我能够解决问题!
恕我直言,仅当您下载了一个大文件并想在重新下载之前检查它是否已损坏(即,如果应用程序未正确安装)时,它才有用。
尽管您选择从受信任的来源(例如 Apache.org)下载,但您的下载请求可能会由镜像站点提供。有问题的受信任站点确实拥有满足所有请求的资源,因此镜像具有重要的功能。但是,受信任站点不一定对镜像站点具有完全控制权,并且镜像所有者(或第三方)可能会用恶意代码替换镜像的可执行文件。通过根据下载的文件验证受信任源的哈希值,您可以确保它在传输过程中没有更改(无论出于何种原因)。
它用于完整性原因(特别是在 ftp 站点上,您可能错误地以 ascii 模式下载)。此外,它可以用来验证下载没有被更改,假设您从位置 a 下载并从位置 b 获取校验和(通常下载来自镜像,并且来自官方站点的哈希)。
但是,出于完整性目的,对文件进行签名将比仅对其进行散列更有用。
我在 Mac OS X 上使用MacPorts ,它是一个基于源代码的包管理器;每个 Portfile 都包含有关如何在 Mac OS X 上下载、修补、编译和安装软件的说明。 Portfile 中包含要下载的特定版本 tarball 的校验和。这有助于确保文件的完整性,避免许多可能的问题;有时,人们会在不增加版本号的情况下更新 tarball,这可能会导致补丁无法应用或代码在某些情况下中断,或者有时包可能会损坏,或者攻击者可能会篡改软件你会安装它。
所以,我不得不说,是的,我每次安装软件时都会使用校验和(虽然我的包管理器会自动为我做,但我不直接做)。即使您从一个受人尊敬的项目手动下载,您也希望从更快、更近的镜像下载代码本身,然后根据从更受信任的主服务器下载的副本验证校验和;这有助于使攻击更加困难,因为必须破坏多台服务器,而不仅仅是一个镜像。