Tính toán CRC (hoặc, tốt hơn, sha1sums) trên cả hai tệp yêu cầu đọc từng byte. Nếu bạn thực hiện so sánh theo từng byte, bạn có thể thoát ngay khi thấy không khớp - và bạn không phải lo lắng về hai tệp khác nhau có cùng một tổng kiểm tra (mặc dù điều đó không chắc chắn cho sha1sum) . Vì vậy, nếu bạn đang thực hiện so sánh cục bộ, so sánh theo byte sẽ ít nhất nhanh bằng so sánh tổng kiểm tra (trừ khi bạn đã tính toán tổng kiểm tra bằng mọi cách).
Mặt khác, so sánh tổng kiểm tra rất hữu ích khi bạn so sánh các tệp không nằm trên cùng một máy; tổng kiểm tra có thể được tính cục bộ và bạn không phải chuyển toàn bộ nội dung qua mạng.
Phương pháp lai cũng có thể. Ví dụ: bạn có thể tính toán và so sánh tổng kiểm tra cho hai tệp một đoạn, điều này có thể tránh đọc toàn bộ tệp ( nếu chúng khác nhau) trong khi cũng tránh truyền toàn bộ tệp qua mạng. Các giao thức rsync làm điều gì đó như thế này.
Lưu ý rằng việc sử dụng CRC đơn giản mang lại cho bạn cơ hội va chạm công bằng, như Dave Rager đã đề cập trong câu trả lời của mình. Sử dụng ít nhất sha1sum, hoặc thậm chí một cái gì đó gần đây hơn. (Đừng cố phát minh thuật toán băm của riêng bạn; những người đã phát triển sha1sum biết nhiều về công cụ này hơn cả chúng ta.)
Đối với khả năng va chạm, nếu bạn sử dụng một hash đàng hoàng như sha1sum bạn khá nhiều không cần phải lo lắng về nó, trừ khi ai đó là cố ý và tốn kém xây dựng các file mà sha1sums va chạm (tạo ra va chạm như vậy là không khả thi khi tôi lần đầu tiên viết này , nhưng tiến độ đang được thực hiện ). Trích dẫn "Pro Git" của Scott Chacon , phần 6.1 :
Đây là một ví dụ để cung cấp cho bạn ý tưởng về những gì sẽ cần để có được một vụ va chạm SHA-1. Nếu tất cả 6,5 tỷ người trên Trái đất đang lập trình và cứ sau mỗi giây, mỗi người sẽ tạo ra mã tương đương với toàn bộ lịch sử hạt nhân Linux (1 triệu đối tượng Git) và đẩy nó vào một kho lưu trữ Git khổng lồ, phải mất 5 năm cho đến khi kho lưu trữ đó chứa đủ các đối tượng để có xác suất 50% cho một vụ va chạm đối tượng SHA-1. Xác suất cao hơn tồn tại là mọi thành viên trong nhóm lập trình của bạn sẽ bị sói tấn công và giết chết trong các sự cố không liên quan trong cùng một đêm.
Tóm lược :
So sánh byte theo byte là tốt cho so sánh cục bộ. sha1sum là tốt để so sánh từ xa, và không có cơ hội dương tính giả.