我一直在为我的虚拟机备份 Windows 安装程序映像,并验证数据是否正确传输,我一直在使用cksum
. 出于好奇,我决定比较cksum
运行与运行md5sum
相同文件所需的时间。多次运行每个操作后的结果(以确保它与 I/O 缓存无关)md5sum
始终花费大约一半的时间cksum
。我有两个问题...
md5sum
比 快这么多cksum
?cksum
了md5sum
。我正在运行 Arch Linux。
注意:这不是关于哪个更好的问题。之前已经多次讨论过这一点,我知道md5sum
不能用作加密哈希。我特别询问使用md5sum
作为查找随机错误的手段。
两种哈希算法执行的计算是不同的,因此它们具有不同的性能特征也就不足为奇了。在 Linux 系统上,md5sum
和cksum
通常都是 GNUcoreutils
版本。md5sum
使用 C 库的 MD5 函数,这些函数经过很好的优化并且一次对块内容进行 32 位操作(参见md5.c
和md5-block.c
)。cksum
使用它自己的 CRC 实现,它一次对内容进行一个字节的操作(请参阅 参考资料cksum.c
)。md5sum
与cksum
;相比,这可能是影响速度的一个因素;毫无疑问,其他人。
要确定哪种工具更适合查找随机错误,您需要分析所涉及算法的数学属性。在一个非常基本的层面上,cksum
产生一个 32 位的散列,而md5sum
产生一个 128 位的散列,因此后者应该更能抵抗意外碰撞(从而更好地检测随机错误,特别是作为翻转位的数量增加)。
我可以看到选择的唯一原因cksum
在md5sum
在于前者是由POSIX指定的,所以任何POSIX系统有它-如果这是一个因素则cksum
可能更合适。
(关于您对加密哈希的评论,cksum
根本不是加密哈希,所以这个问题没有实际意义。)
归档时间: |
|
查看次数: |
1022 次 |
最近记录: |