Backup

為什麼 cksum 的執行速度會比 md5sum 慢?

  • February 10, 2017

我一直在為我的虛擬機備份 Windows 安裝程序映像,為了驗證數據是否正確傳輸,我一直在使用cksum. 出於好奇,我決定比較相同文件的cksum執行時間和執行時間。md5sum多次執行每個操作(以確保它與 I/O 記憶體無關)後的結果是md5sum始終花費大約一半的時間作為cksum. 我有兩個問題…

  1. 為什麼會md5sum比 快那麼多cksum
  2. 為了發現隨機錯誤,有什麼理由我應該選擇cksumover md5sum.

我正在執行 Arch Linux。

**注意:**這不是關於哪個更好的問題。之前已經討論過很多次了,我知道md5sum不能用作加密雜湊。我特別詢問使用md5sum作為查找隨機錯誤的方法。

兩種散列算法執行的計算是不同的,因此它們具有不同的性能特徵也就不足為奇了。在 Linux 系統上,兩者md5sum通常cksum都是 GNUcoreutils版本。md5sum使用 C 庫的 MD5 函式,這些函式經過了很好的優化,一次對塊內容進行 32 位操作(請參閱md5.cmd5-block.c)。cksum使用它自己的 CRC 實現,它一次對一個字節的內容進行操作(請參閱 參考資料cksum.c)。md5sum與 ;相比,這可能是影響速度的一個因素cksum;毫無疑問,其他人。

要確定哪種工具更適合查找隨機錯誤,您需要分析所涉及算法的數學特性。在一個非常基本的級別上,cksum產生一個 32 位散列,而md5sum產生一個 128 位散列,因此後者應該更能抵抗意外衝突(因此更好地檢測隨機錯誤,尤其是翻轉位數增加)。

我可以看到選擇的唯一原因cksummd5sum前者是由 POSIX 指定的,所以任何 POSIX 系統都會有它——如果這是一個因素,那麼cksum會更合適。

(關於您對加密雜湊的評論,cksum根本不是加密雜湊,所以這個問題沒有實際意義。)

引用自:https://unix.stackexchange.com/questions/343900