Backup為什麼
為什麼 cksum
的執行速度會比 md5sum
慢?
我一直在為我的虛擬機備份 Windows 安裝程序映像,為了驗證數據是否正確傳輸,我一直在使用
cksum
. 出於好奇,我決定比較相同文件的cksum
執行時間和執行時間。md5sum
多次執行每個操作(以確保它與 I/O 記憶體無關)後的結果是md5sum
始終花費大約一半的時間作為cksum
. 我有兩個問題…
- 為什麼會
md5sum
比 快那麼多cksum
?- 為了發現隨機錯誤,有什麼理由我應該選擇
cksum
overmd5sum
.我正在執行 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
根本不是加密雜湊,所以這個問題沒有實際意義。)