Obliczanie CRC (lub, lepiej, sum sha1) w obu plikach i tak wymaga odczytu każdego bajtu. Jeśli porównasz bajt po bajcie, możesz wyjść, gdy tylko zobaczysz niedopasowanie - i nie musisz się martwić o dwa różne pliki, które mają taką samą sumę kontrolną (choć jest to mało prawdopodobne w przypadku sha1sum) . Jeśli więc przeprowadzasz porównanie lokalnie, porównanie bajt po bajcie będzie co najmniej tak szybkie jak porównanie sumy kontrolnej (chyba że i tak już obliczyłeś sumy kontrolne).
Z drugiej strony porównania sum kontrolnych są przydatne podczas porównywania plików, które nie znajdują się na tym samym komputerze; sumy kontrolne można obliczać lokalnie i nie trzeba przesyłać całej zawartości przez sieć.
Możliwe są również podejścia hybrydowe. Na przykład możesz obliczyć i porównać sumy kontrolne dla dwóch plików po jednym kawałku, co pozwoli uniknąć odczytu całych plików ( jeśli się różnią), a jednocześnie pozwoli uniknąć przesyłania całego pliku przez sieć. Protokołem rsync robi coś takiego.
Zauważ, że użycie prostego CRC daje uczciwą szansę na kolizję, jak wspomniał Dave Rager w swojej odpowiedzi. Użyj przynajmniej sha1sum lub nawet czegoś nowszego. (Nie próbuj wynaleźć własnego algorytmu haszującego; ludzie, którzy opracowali sha1sum, wiedzą o tym dużo więcej niż każdy z nas.)
Jeśli chodzi o prawdopodobieństwo kolizji, jeśli używasz porządnego skrótu, takiego jak sha1sum, prawie nie musisz się tym martwić, chyba że ktoś celowo i kosztownie konstruuje pliki, których zderzają się sha1sum (generowanie takich kolizji nie było wykonalne, kiedy pierwszy raz to napisałem , ale poczyniono postępy ). Cytując „Pro Git” Scotta Chakona , sekcja 6.1 :
Oto przykład, który daje wyobrażenie o tym, czego potrzeba, aby uzyskać kolizję SHA-1. Gdyby wszystkie 6,5 miliarda ludzi na Ziemi programowało i co sekundę, każdy produkowałby kod, który byłby ekwiwalentem całej historii jądra Linuksa (1 milion obiektów Git) i umieszczał go w jednym ogromnym repozytorium Git, zajęłoby to 5 lat repozytorium zawierało wystarczającą liczbę obiektów, aby prawdopodobieństwo 50% zderzenia pojedynczego obiektu SHA-1 było 50%. Istnieje większe prawdopodobieństwo, że każdy członek zespołu programistycznego zostanie zaatakowany i zabity przez wilki w niepowiązanych zdarzeniach tej samej nocy.
Streszczenie :
Porównanie bajtów po bajcie jest dobre dla porównań lokalnych. sha1sum jest dobry do zdalnego porównywania i nie ma znaczącej szansy na fałszywe alarmy.