我一直在为虚拟机备份Windows映像,为了验证数据是否正确传输,我一直在使用cksum。出于好奇,我决定比较一下cksum和md5sum在相同文件下运行所需的时间。在多次运行每个操作(以确保它与I/O缓存无关)之后,结果是md5sum作为cksum始终占用了大约一半的时间。我有两个问题..。
md5sum比cksum快得多?cksum而不是md5sum。我在运行Arch Linux。
注:这不是一个更好的问题。以前已经讨论过很多次了,我知道md5sum不会被用作加密散列。我特别询问使用md5sum作为查找随机错误的方法。
发布于 2017-02-10 09:40:25
这两种哈希算法所执行的计算是不同的,因此它们具有不同的性能特性并不奇怪。在Linux系统上,md5sum和cksum通常都是GNU coreutils版本。md5sum使用C库的MD5函数,这些函数经过了很好的优化,每次对块内容进行32位操作(参见md5.c和md5-block.c)。cksum使用它自己的CRC实现,它一次对内容进行一个字节的操作(参见cksum.c)。这可能是md5sum相对于cksum的S速度的一个因素;毫无疑问,还有其他因素。
要确定哪种工具更适合查找随机错误,您需要分析所涉及的算法的数学特性。在一个非常基本的层次上,cksum生成32位哈希,而md5sum生成128位哈希,因此后者应该更好地抵抗意外碰撞(从而更好地检测随机错误,特别是随着翻转位数的增加)。
我看到选择cksum而不是md5sum的唯一原因是前者是由POSIX指定的,所以任何POSIX系统都会有它--如果这是一个因素,那么cksum将更合适。
(关于您对密码散列的评论,cksum根本不是密码散列,所以这个问题是没有意义的。)
https://unix.stackexchange.com/questions/343900
复制相似问题