Voyons cela d'un point de vue pratique. Au lieu de dire "les hachages sont identiques", je dirai "j'ai écrit un programme informatique qui calcule les hachages de deux fichiers et indique s'ils sont identiques ou non", et j'exécute le programme avec deux fichiers, et il dit "identique". Il y a plusieurs raisons pour lesquelles il peut faire cela :
Les fichiers peuvent être identiques. Mon code peut comporter des bogues (l'un d'entre eux, qui s'est produit en pratique, consistait à comparer deux longs hachages (256 octets) non pas avec memcmp mais avec strcmp : La comparaison renverra "identique" si le premier octet de chaque hachage est zéro, et la probabilité que cela se produise est de 1 sur 65536. Il peut y avoir un défaut matériel (un rayon cosmique frappant une cellule de mémoire et la commutant). Ou vous pouvez avoir le cas rare de deux fichiers différents avec un hachage identique (une collision de hachage).
Je dirais que pour les fichiers non identiques, la cause la plus probable est de loin une erreur du programmeur, puis vient le rayon cosmique qui a modifié une variable booléenne avec le résultat de la comparaison des hachages de "faux" à "vrai", et beaucoup plus tard vient la coïncidence d'une collision de hachage.
Il existe des systèmes de sauvegarde d'entreprise qui évitent de sauvegarder les fichiers identiques de 10 000 utilisateurs en hachant chaque fichier et en vérifiant si un fichier avec un hachage identique est déjà stocké sur le serveur. Ainsi, en cas de collision, un fichier ne sera pas sauvegardé, ce qui peut entraîner une perte de données. Quelqu'un a calculé qu'il est beaucoup plus probable qu'une météorite frappe votre serveur et détruise toutes les sauvegardes que de perdre un fichier parce que sa somme de contrôle correspond à un autre fichier.