Le calcul des CRC (ou, mieux, des sha1sums) sur les deux fichiers nécessite de toute façon de lire chaque octet. Si vous effectuez une comparaison octet par octet, vous pouvez quitter dès que vous voyez une incompatibilité - et vous n'avez pas à vous soucier de deux fichiers différents qui ont la même somme de contrôle (bien que cela soit peu probable pour sha1sum) . Donc, si vous effectuez la comparaison localement, une comparaison octet par octet sera au moins aussi rapide qu'une comparaison de somme de contrôle (sauf si vous avez déjà calculé les sommes de contrôle de toute façon).
D'un autre côté, les comparaisons de sommes de contrôle sont utiles lorsque vous comparez des fichiers qui ne sont pas sur la même machine; les sommes de contrôle peuvent être calculées localement et vous n'avez pas à transférer l'intégralité du contenu sur le réseau.
Des approches hybrides sont également possibles. Par exemple, vous pouvez calculer et comparer des sommes de contrôle pour les deux fichiers un morceau à la fois, ce qui peut éviter de lire l'intégralité des fichiers ( s'ils diffèrent) tout en évitant de transmettre l'intégralité du fichier sur le réseau. Le protocole rsync fait quelque chose comme ça.
Notez que l'utilisation d'un simple CRC vous donne une bonne chance de collision, comme Dave Rager l'a mentionné dans sa réponse. Utilisez au moins sha1sum, ou même quelque chose de plus récent. (N'essayez pas d'inventer votre propre algorithme de hachage; les personnes qui ont développé sha1sum en savent beaucoup plus sur ce genre de choses que nous deux.)
En ce qui concerne la probabilité de collision, si vous utilisez un hachage décent comme sha1sum, vous n'avez pratiquement pas à vous en soucier, à moins que quelqu'un ne construise délibérément et cher des fichiers dont les sha1sums entrent en collision (générer de telles collisions n'était pas faisable lorsque j'ai écrit ceci pour la première fois) , mais des progrès sont en cours ). Citant «Pro Git» de Scott Chacon , section 6.1 :
Voici un exemple pour vous donner une idée de ce qu'il faudrait pour obtenir une collision SHA-1. Si les 6,5 milliards d'humains sur Terre étaient en train de programmer, et chaque seconde, chacun produisait du code qui était l'équivalent de toute l'histoire du noyau Linux (1 million d'objets Git) et le poussait dans un énorme référentiel Git, cela prendrait 5 ans jusqu'à ce référentiel contenait suffisamment d'objets pour avoir une probabilité de 50% de collision d'un seul objet SHA-1. Il est plus probable que tous les membres de votre équipe de programmation soient attaqués et tués par des loups dans des incidents non liés la même nuit.
Sommaire :
La comparaison octet par octet est bonne pour les comparaisons locales. sha1sum est bon pour la comparaison à distance et ne présente aucun risque significatif de faux positifs.