การคำนวณ CRCs (หรือดีกว่า sha1sums) ในไฟล์ทั้งสองนั้นจำเป็นต้องอ่านทุกไบต์ หากคุณทำการเปรียบเทียบแบบไบต์ต่อไบต์คุณสามารถออกได้ทันทีที่คุณเห็นข้อมูลไม่ตรงกัน - และคุณไม่ต้องกังวลเกี่ยวกับไฟล์สองไฟล์ที่แตกต่างกันซึ่งมีการตรวจสอบเดียวกัน (แม้ว่าจะไม่น่าจะหายไปสำหรับ sha1sum) . ดังนั้นหากคุณทำการเปรียบเทียบแบบโลคัลการเปรียบเทียบแบบไบต์ต่อไบต์จะเร็วกว่าการเปรียบเทียบค่า checksum อย่างน้อย (เว้นแต่คุณจะคำนวณค่า checksums อยู่แล้ว)
ในทางกลับกันการตรวจสอบการเปรียบเทียบมีประโยชน์เมื่อคุณเปรียบเทียบไฟล์ที่ไม่ได้อยู่ในเครื่องเดียวกัน สามารถคำนวณ checksums ในพื้นที่และคุณไม่จำเป็นต้องถ่ายโอนเนื้อหาทั้งหมดผ่านเครือข่าย
วิธีไฮบริดยังเป็นไปได้ ตัวอย่างเช่นคุณอาจคำนวณและเปรียบเทียบ checksums ของไฟล์สองไฟล์ต่อครั้งซึ่งสามารถหลีกเลี่ยงการอ่านไฟล์ทั้งหมด ( หากแตกต่างกัน) ขณะเดียวกันก็หลีกเลี่ยงการส่งไฟล์ทั้งหมดผ่านเครือข่าย โปรโตคอล rsyncทำอะไรเช่นนี้
โปรดทราบว่าการใช้ซีอาร์ซีแบบง่ายช่วยให้คุณมีโอกาสปะทะกันอย่างรุนแรงดังที่ Dave Rager พูดถึงในคำตอบของเขา ใช้อย่างน้อย sha1sum หรือแม้แต่สิ่งที่ใหม่กว่า (อย่าพยายามคิดค้นอัลกอริทึมการแปลงแป้นพิมพ์ของคุณเองผู้ที่พัฒนา sha1sum รู้เรื่องนี้มากกว่าเราคนใดคนหนึ่ง)
ในฐานะที่เป็นโอกาสของการปะทะกันถ้าคุณใช้กัญชาดีเช่น sha1sum คุณสวยมากไม่ต้องกังวลเกี่ยวกับเรื่องนี้เว้นแต่มีคนจงใจและราคาแพงสร้างไฟล์ที่มี sha1sums ชน (สร้างการชนกันดังกล่าวไม่เป็นไปได้เมื่อครั้งแรกที่ผมเขียนนี้ แต่กำลังดำเนินการอยู่ ) เธซเธฑสกอตต์ Chacon ของ "โปร Git" , ส่วนที่ 6.1 :
ต่อไปนี้เป็นตัวอย่างเพื่อให้คุณทราบถึงสิ่งที่จะได้รับการชน SHA-1 หากมนุษย์ 6.5 พันล้านคนบนโลกเขียนโปรแกรมและทุก ๆ วินาทีแต่ละคนก็สร้างรหัสที่เทียบเท่ากับประวัติเคอร์เนลของลินุกซ์ทั้งหมด (1 ล้านวัตถุ Git) และผลักมันลงในที่เก็บ Git อันยิ่งใหญ่มันใช้เวลา 5 ปีจนกระทั่ง ที่เก็บนั้นมีวัตถุมากพอที่จะมีโอกาส 50% ของการชนกันของวัตถุ SHA-1 เดียว มีความเป็นไปได้สูงกว่าที่สมาชิกทีมงานเขียนโปรแกรมของคุณทุกคนจะถูกโจมตีและสังหารโดยหมาป่าในเหตุการณ์ที่ไม่เกี่ยวข้องในคืนเดียวกัน
สรุป :
การเปรียบเทียบแบบไบต์ต่อไบต์นั้นดีสำหรับการเปรียบเทียบในท้องถิ่น sha1sum นั้นดีสำหรับการเปรียบเทียบจากระยะไกลและไม่มีโอกาสที่จะเกิดผลบวกปลอม