O cálculo de CRCs (ou, melhor, sha1sums) nos dois arquivos requer a leitura de todos os bytes. Se você fizer uma comparação de byte a byte, poderá sair assim que encontrar uma incompatibilidade - e não precisará se preocupar com dois arquivos diferentes que possuam a mesma soma de verificação (embora isso seja improvável para sha1sum) . Portanto, se você estiver fazendo a comparação localmente, uma comparação de byte a byte será pelo menos tão rápida quanto uma comparação de soma de verificação (a menos que você já tenha calculado as somas de verificação de qualquer maneira).
Por outro lado, as comparações de soma de verificação são úteis quando você está comparando arquivos que não estão na mesma máquina; as somas de verificação podem ser calculadas localmente e você não precisa transferir todo o conteúdo pela rede.
Abordagens híbridas também são possíveis. Por exemplo, você pode calcular e comparar somas de verificação para os dois arquivos um pedaço de cada vez, o que pode evitar a leitura dos arquivos inteiros ( se eles diferirem) e também a transmissão do arquivo inteiro pela rede. O protocolo rsync faz algo assim.
Observe que o uso de um CRC simples oferece uma boa chance de colisão, como Dave Rager mencionou em sua resposta. Use pelo menos sha1sum ou mesmo algo mais recente. (Não tente inventar seu próprio algoritmo de hash; as pessoas que desenvolveram sha1sum sabem muito mais sobre isso do que qualquer um de nós.)
Quanto à probabilidade de colisão, se você usa um hash decente como sha1sum, não precisa se preocupar com isso, a menos que alguém esteja construindo deliberada e dispendiosamente arquivos cujos sha1sums colidem (gerar essas colisões não era viável quando escrevi pela primeira vez isso. , mas está sendo feito progresso ). Citando o "Pro Git" de Scott Chacon , seção 6.1 :
Aqui está um exemplo para lhe dar uma idéia do que seria necessário para obter uma colisão com SHA-1. Se todos os 6,5 bilhões de humanos na Terra estivessem programando, e a cada segundo, cada um estivesse produzindo código equivalente a toda a história do kernel do Linux (1 milhão de objetos Git) e inserindo-o em um enorme repositório Git, levaria 5 anos até esse repositório continha objetos suficientes para ter uma probabilidade de 50% de uma única colisão de objeto SHA-1. Existe uma probabilidade maior de que todos os membros da sua equipe de programação sejam atacados e mortos por lobos em incidentes não relacionados na mesma noite.
Resumo:
A comparação byte a byte é boa para comparações locais. O sha1sum é bom para comparação remota e não apresenta chance significativa de falsos positivos.