为什么“cksum”的运行速度比“md5sum”慢?

为什么“cksum”的运行速度比“md5sum”慢?

我一直在备份虚拟机的 Windows 安装程序映像,为了验证数据是否正确传输,我一直在使用cksum.出于好奇,我决定比较相同文件的cksum运行时间和运行时间。md5sum运行每个操作几次后的结果(以确保它与 I/O 缓存无关)始终md5sum花费大约一半的时间cksum。我有两个问题...

  1. 为什么会md5sum比 快这么多cksum
  2. 为了发现随机错误,我有什么理由应该cksum选择md5sum.

我正在运行 Arch Linux。

笔记:这不是哪个更好的问题。这之前已经讨论过很多次了,我知道md5sum这不应该被用作密码学的哈希。我具体询问如何使用md5sum作为查找手段随机误差

答案1

两种哈希算法执行的计算不同,因此它们具有不同的性能特征也就不足为奇了。在 Linux 系统上,md5sumcksum通常都是 GNUcoreutils版本。md5sum使用 C 库的 MD5 函数,该函数经过了很好的优化,并且一次对块内容 32 位进行操作(请参阅md5.cmd5-block.c)。cksum使用自己的 CRC 实现,一次对一个字节的内容进行操作(请参阅cksum.c)。md5sum与 相比,这可能是速度的一个影响因素cksum;毫无疑问还有其他人。

要确定哪种工具更适合查找随机错误,您需要分析所涉及算法的数学属性。在非常基本的层面上,cksum生成 32 位哈希值,而md5sum生成 128 位哈希值,因此后者应该更能抵抗意外冲突(因此能够更好地检测随机错误,特别是当翻转位的数量较多时)增加)。

我认为选择的唯一原因cksummd5sum前者是由 POSIX 指定的,因此任何 POSIX 系统都会有它——如果这是一个因素,那么cksum会更合适。

(关于您对加密哈希的评论,cksum根本不是加密哈希,所以这个问题没有实际意义。)

相关内容