두 파일에서 CRC (또는 더 나은 sha1sums)를 계산하려면 모든 바이트를 읽어야합니다. 바이트 단위 비교를 수행하는 경우 불일치가 발생하자마자 종료 할 수 있으며 동일한 체크섬을 갖는 두 개의 서로 다른 파일에 대해 걱정할 필요가 없습니다 (sha1sum에서는 사라질 수는 없지만) . 따라서 로컬에서 비교를 수행하는 경우 바이트 체크 비교는 적어도 체크섬 비교만큼 빠릅니다 (아직 체크섬을 계산하지 않은 경우).
반면, 체크섬 비교는 동일한 컴퓨터에없는 파일을 비교할 때 유용합니다. 체크섬은 로컬로 계산할 수 있으며 네트워크를 통해 전체 내용을 전송할 필요가 없습니다.
하이브리드 접근법도 가능합니다. 예를 들어, 한 번에 한 청크 씩 두 파일의 체크섬을 계산하고 비교할 수 있습니다. 이렇게하면 전체 파일을 읽는 것을 피할 수 있으며 ( 다른 경우 ) 전체 파일을 네트워크를 통해 전송하지 않아도됩니다. rsync를 프로토콜은 이 같은 작업을 수행합니다.
Dave Rager가 그의 답변에서 언급했듯이 간단한 CRC를 사용하면 충돌의 가능성이 높아집니다. 최소한 sha1sum 또는 더 최근의 것을 사용하십시오 . (나만의 해싱 알고리즘을 만들려고하지 마십시오. sha1sum을 개발 한 사람들은이 둘에 대해 훨씬 더 많이 알고 있습니다.)
충돌 가능성에 관해서는 sha1sum과 같은 괜찮은 해시를 사용하면 누군가가 sha1sum이 충돌하는 파일을 고의적으로 고가로 생성 하지 않는 한 걱정할 필요 가 없습니다 ( 처음으로 이것을 쓸 때 충돌을 일으킬 수 없었습니다) 하지만 진전이 이루어지고 있습니다 ). Scott Chacon의 "Pro Git" , 섹션 6.1 인용 :
다음은 SHA-1 충돌 발생에 대한 아이디어를 제공하는 예입니다. 지구상의 65 억 명의 사람들이 프로그래밍을하고 매초마다 전체 리눅스 커널 역사 (1 백만 개의 Git 객체)와 동등한 코드를 생성하여 하나의 거대한 Git 저장소로 밀어 넣는다면 5 년이 걸릴 것입니다. 이 저장소에는 단일 SHA-1 오브젝트 충돌의 50 % 확률을 갖기에 충분한 오브젝트가 포함되어 있습니다. 프로그래밍 팀의 모든 구성원이 같은 날 밤 관련없는 사건에서 늑대에 의해 공격 당하고 살해 당할 가능성이 더 높습니다.
요약 :
바이트 별 비교는 로컬 비교에 적합합니다. sha1sum은 원격 비교에 적합하며 오 탐지 가능성이 크지 않습니다.