Un hachage cryptographique ou une somme de contrôle identique pour deux fichiers signifie-t-il qu'ils sont identiques?


57

J'ai 2 documents Excel et je veux vérifier s'ils sont exactement les mêmes, à part le nom du fichier.

Par exemple, les fichiers sont appelés fileone.xlset filetwo.xls. Hormis les noms de fichiers, leur contenu est présumé identique, mais c’est ce que je veux vérifier.

J'ai cherché des moyens de réviser cela et sans installer un tas de plugins. Il ne semble pas y avoir de solution simple.

J'ai essayé de générer des hachages MD5 pour les deux fichiers. Lorsque les hachages sont identiques, cela signifie-t-il que le contenu du fichier est identique à 1: 1?


8
cryptohashes et parfois même des hachages normaux peuvent être utiles pour comparer des fichiers sur différents systèmes ou pour rechercher parmi un grand nombre de fichiers, mais si deux fichiers sont sur le même système, vous pouvez facilement les comparer avec cmpUnix ou fc(comparaison de fichiers) sous Windows.
dave_thompson_085

10
shattered.io - SHA1 est un algorithme de hachage "plus fort" que md5 et toujours shattered.io/static/shattered-1.pdf et shattered.io/static/shattered-2.pdf ont la même valeur de hachage tout en étant complètement différents.
styromousse voler

30
Note latérale: vérifiez d'abord leurs tailles. S'ils ont des tailles différentes, ne vous embêtez pas d'ouvrir les fichiers, ils sont différents.
Emilio M Bumachar

42
Version simpliste: un hachage MD5 est suffisant pour protéger contre un accident , il ne suffit pas pour empêcher la malveillance . Que ce soit suffisant pour vous, vous devez décider en fonction de votre situation.
Euro Micelli

9
diff -s file1 file2si elle indique qu'elles sont identiques, elles le sont (il compare en fait les fichiers octet par octet, de sorte que même les collisions de hachage sont exclues). Les sommes de contrôle sont utilisées lorsque vous n’avez qu’un hachage et un élément que l’on pense être identique à l’origine de ce hachage.
Bakuriu

Réponses:


92

Lorsque les hachages sont identiques, cela signifie-t-il que le contenu du fichier est identique à 1: 1?

Tous les fichiers sont une collection d'octets (valeurs 0-255). Si deux hachages MD5 de fichiers correspondent, ces deux collections d'octets sont très probablement exactement identiques (même ordre, mêmes valeurs).

Il y a très peu de chance que deux fichiers génèrent le même MD5, un hachage de 128 bits. La probabilité est de:

La probabilité d’une collision accidentelle entre deux hachages est égale à 1/2 128, soit 1 sur 340 undecillion 282 décillions 366 milliards en 920 octillions 938 septillions 463 sextillions 463 milliards de 373 milliards de milliards 607 milliards de milliards de personnes .

Les hachages sont conçus pour fonctionner dans "une seule direction" - vous prenez une collection d'octets et obtenez un hachage, mais vous ne pouvez pas prendre un hachage et récupérer une collection d'octets.

La cryptographie en dépend (c’est une façon de comparer deux choses sans savoir ce que sont ces choses.)

Vers l’année 2005, des méthodes ont été découvertes pour prendre un hachage MD5 et créer des données correspondant à ce dernier afin de créer deux documents ayant le même hachage MD5 ( attaque par collision ). Voir le commentaire de @ user2357112 ci-dessous. Cela signifie qu'un attaquant peut créer deux fichiers exécutables, par exemple, qui ont le même MD5, et si vous dépendez de MD5 pour déterminer lequel faire confiance, vous serez dupe.

Ainsi, MD5 ne doit pas être utilisé pour la cryptographie ou la sécurité. Il est mauvais de publier un MD5 sur un site de téléchargement pour garantir l’intégrité du téléchargement, par exemple. En fonction du hachage MD5, vous ne voulez pas vous assurer que le contenu du fichier ou des données est correct.

Si vous générez le vôtre, vous savez que vous n'êtes pas méchant avec vous-même (espérons-le). Donc, pour votre usage, ça va, mais si vous voulez que quelqu'un d'autre puisse le reproduire et que vous vouliez publier le hachage MD5, un meilleur hachage devrait être utilisé.


Notez qu'il est possible que deux fichiers Excel contiennent les mêmes valeurs dans les mêmes lignes et colonnes, mais que le flux secondaire du fichier soit complètement différent en raison de la mise en forme, des styles, des paramètres, etc. différents.

Si vous souhaitez comparer les données du fichier, exportez-les au format CSV avec les mêmes lignes et colonnes, pour supprimer toutes les mises en forme, puis effectuez un hachage ou une comparaison des fichiers CSV.


107
Les fichiers Excel et autres documents Office peuvent également avoir des hachages différents car ils ont été ouverts et réenregistrés sans rien changer, car les métadonnées du fichier ont une nouvelle valeur stockée pour la dernière date / heure enregistrée.
BeowulfNode42

29
Bonus: si vous avez exporté au format CSV, vous pouvez utiliser l' diffutilitaire vénérable ou un outil similaire pour vous assurer que les fichiers sont identiques octet par octet, au lieu d'avoir le même hachage.
Monty Harder

18
Prendre un hachage et créer des données qui correspondent à celui-ci est une attaque de pré-image. Je pense que MD5 est actuellement vulnérable aux attaques par collision, mais je ne pense pas que les attaques de pré-image ou de seconde pré-image soient viables pour le moment.
user2357112

2
@ Tim que dites-vous? Il a dit: exportez-les au format CSV et utilisez-les diff -spour vérifier si les fichiers CSV sont identiques. En fait, vous pouvez diff -smême utiliser les fichiers Excel: si diffvous dites qu'ils sont identiques, vous n'avez pas besoin de passer à la comparaison CSV.
Bakuriu

2
@Bakuriu Clairement, mon commentaire était très mal formulé - je voulais dire que l'exportation au format CSV perdra beaucoup d'informations, notamment des formules, des graphiques, des formats conditionnels et standard.
Tim

37

En pratique, oui, un hachage cryptographique identique signifie que les fichiers sont identiques, tant qu'ils n'ont pas été conçus par un attaquant ou une autre entité malveillante. Les probabilités de collision aléatoire avec une fonction de hachage cryptographique bien conçue sont si minimes qu'elles sont négligeables en pratique et en l'absence d'un attaquant actif.

En général, cependant, non, nous ne pouvons pas dire que deux fichiers arbitraires ayant le même hachage signifient de manière définitive qu'ils sont identiques.

Le fonctionnement d'une fonction de hachage cryptographique consiste à prendre une entrée de longueur arbitraire et à générer une valeur de longueur fixe calculée à partir de l'entrée. Certaines fonctions de hachage ont le choix entre plusieurs longueurs de sortie, mais la sortie reste dans une certaine mesure une valeur de longueur fixe. Cette valeur peut aller jusqu'à quelques dizaines d'octets; les algorithmes de hachage avec la plus longue valeur de sortie couramment utilisée ont une sortie de 512 bits et une sortie de 512 bits est de 64 octets.

Si une entrée dans une fonction de hachage est plus longue que la sortie de la fonction de hachage, une certaine fidélité doit être supprimée pour que l'entrée tienne dans la sortie. Par conséquent, il doit exister plusieurs entrées de longueur supérieure à la longueur de la sortie, qui génèrent la même sortie.

Prenons le cheval de bataille actuel, SHA-256, à titre d'exemple. Il génère un hachage de 256 bits ou 32 octets. Si vous avez deux fichiers qui font chacun exactement 32 octets de long, mais qui sont différents, ils devraient (en supposant qu’aucun défaut de l’algorithme ne soit utilisé) hacher en valeurs différentes, quel que soit le contenu des fichiers; mathématiquement, le hachage est une fonction qui mappe un espace de 2 256 entrées sur un espace de 2 256 sorties, ce qui devrait être possible sans collisions. Cependant, si vous avez deux fichiers qui sont chacun 33 octets, il doit exister une combinaison d'entrées qui donnent la même valeur de hachage de sortie 32 octets pour les deux fichiers, parce que nous sommes la cartographie maintenant 2 264 l' espace d'entrée sur un 2 256espace de sortie; ici, nous pouvons facilement voir qu’il devrait exister, en moyenne, 2 à 8 entrées pour chaque sortie. Allez plus loin, et avec les fichiers de 64 octets, il devrait exister 2 256 entrées pour chaque sortie!

Les fonctions de hachage cryptographique sont conçues de telle sorte qu'il est difficile de composer une entrée qui donne une sortie particulière, ou de composer deux entrées qui donnent la même sortie. Ceci est connu sous le nom de résistance d' attaque pré-image ou résistance d' attaque par collision . Il n'est pas impossible de trouver ces collisions; c'est juste destiné à être vraiment, vraiment, vraiment, vraiment difficile. (Un cas particulier d'attaque par collision est une attaque par anniversaire .)

Certains algorithmes sont plus efficaces que d'autres pour résister aux attaquants. Le MD5 est généralement considéré comme complètement cassé ces jours-ci, mais à la fin j'ai jeté un œil, il portait encore une bonne première résistance à la pré-image . SHA-1 est également efficacement cassé; les attaques de pré-image ont été démontrées, mais nécessitent des conditions spécifiques, bien qu'il n'y ait aucune raison de croire que ce sera le cas indéfiniment; comme dit le proverbe, les attaques s'améliorent toujours, elles ne s'aggravent jamais. SHA-256/384/512 sont toujours considérés comme sûrs dans la plupart des cas. Toutefois , si vous souhaitez simplement savoir si deux cartes non malveillantes, validesles fichiers sont identiques, alors aucun de ceux-ci ne devrait suffire, car l’espace d’entrée est déjà suffisamment limité pour vous intéresser surtout aux collisions aléatoires. Si vous avez des raisons de croire que les fichiers ont été créés de manière malveillante, vous devez au moins utiliser une fonction de hachage cryptographique actuellement considérée comme étant sûre, ce qui place la barre inférieure à SHA-256.

La première image consiste à trouver une entrée qui donne une valeur de hachage de sortie spécifique; la deuxième préimage consiste à trouver une entrée qui donne la même sortie qu’une autre entrée spécifiée; La collision consiste à trouver deux entrées qui produisent la même sortie, sans tenir compte de ce que c'est et parfois sans égard à ce que sont les entrées.

Cela dit, il est important de garder à l'esprit que les fichiers peuvent avoir des représentations de données très différentes et toujours afficher exactement la même chose. Ainsi, ils peuvent sembler être les mêmes même si leurs hachages cryptographiques ne correspondent pas, mais si les hachages sont identiques, ils ont toutes les chances de paraître identiques.


2
Si les hachages concordent, les fichiers sont le résultat d'une collision délibérée ou ne le sont pas. Ils sont ensuite garantis identiques. La probabilité d'une collision accidentelle est purement théorique. Dire que «si les hachages concordent, alors ils ont toutes les chances de paraître identiques» est trompeur: s'il y a de la malveillance et qu'il s'agit d'une situation de collision, ils ne sont probablement pas identiques, et sinon la probabilité est effectivement nulle, Un événement à faible probabilité contre lequel il faut se défendre.
Gilles 'SO- arrête d'être méchant'

9
@ Gilles: Au contraire. Le libellé de Michael est tout à fait juste, et "garanti" est trompeur (ou, en fait, faux dans les faits). La probabilité que deux fichiers avec des hachages identiques ne correspondent pas (malgré des modifications malveillantes) est extrêmement faible et peut être négligée dans la pratique. Ce n'est cependant pas zéro . Il y a généralement une chance, que , pour une raison quelconque les différentes entrées vont produire le même hachage, et peut - être même avec une probabilité beaucoup plus élevée que 2 ^ -128 (algorithmes de chiffrement sont de l' art noir, le algortihme peut être viciée d'une manière subtile, inconnu et nous n'avons aucun moyen d'être sûr à 100%).
Damon

5
@Gilles " effectivement zéro " n'est toujours pas zéro , ce qui signifie qu'il existe encore une probabilité (certes petite) que deux ensembles de données différents aboutissent au même hachage. Vous ne pouvez pas discuter contre cela.
Attie

5
@Attie: La probabilité de hachage de deux fichiers non liés sur la même valeur est si inférieure à la probabilité que de nombreux autres problèmes puissent se produire (par exemple, des erreurs de bits aléatoires corrompant des fichiers sur le disque) qu'il n'est pas utile de se prémunir contre des correspondances fortuites. Se protéger contre des matches délibérément conçus peut en valoir la peine, mais les matchs accidentels sont tellement improbables que tout effort de protection contre eux pourrait probablement être mieux dépensé ailleurs.
Supercat

3
@ Gilles faux. En un souffle, vous ne pouvez pas me dire qu'il y a une chance, aussi minime soit - elle, qu'une collision accidentelle se produise, alors aucune collision ne peut survenir à la toute prochaine subvention. Dire cela est très trompeur car cela implique une propriété de l'algorithme de hachage dont on sait déjà qu'elle est complètement fausse.
iheanyi

10

C'est un jeu de probabilité ... les hachages sont capables de représenter un nombre fini de valeurs.

Si nous considérons un algorithme de hachage hypothétique (et très faible) à 8 bits, il peut représenter 256 valeurs distinctes. Lorsque vous commencerez à exécuter des fichiers via l'algorithme, vous obtiendrez des hachages ... mais d'ici peu, vous verrez apparaître des " collisions de hachage ". Cela signifie que deux fichiers différents ont été introduits dans l'algorithme et qu'il a généré la même valeur de hachage que sa sortie. Clairement ici, le hachage n’est pas assez fort, et nous ne pouvons pas affirmer que "les fichiers avec des hachages correspondants ont le même contenu ".

L'extension de la taille du hachage et l'utilisation d'algorithmes de hachage cryptographique plus puissants peuvent contribuer de manière significative à réduire les collisions et à augmenter la confiance que deux fichiers avec le même hachage ont le même contenu.

Cela dit, nous ne pouvons jamais atteindre 100% de certitude - nous ne pouvons jamais prétendre sûr que deux fichiers avec le même hachage vraiment ont le même contenu.

Dans la plupart / beaucoup de situations, tout va bien, et comparer les hachages est " assez bon ", mais cela dépend de votre modèle de menace.

En fin de compte, si vous devez augmenter les niveaux de certitude, je vous recommande de procéder comme suit:

  1. Utilisez des algorithmes de hachage puissants ( MD5 n'est plus considéré comme adéquat si vous devez vous protéger contre des utilisateurs potentiellement malveillants).
  2. Utiliser plusieurs algorithmes de hachage
  3. Comparez la taille des fichiers - un point de données supplémentaire peut aider à identifier les collisions potentielles, mais notez que la collision MD5 démontrée n'a pas besoin de modifier la longueur des données.

Si vous devez être sûr à 100%, commencez par un hachage, mais si les hachages concordent, effectuez une comparaison octet par octet des deux fichiers.


De plus, comme l'ont souligné d'autres personnes ... la complexité des documents produits par des applications telles que Word et Excel signifie que le texte, les chiffres et la disposition visible peuvent être identiques, mais que les données stockées dans le fichier peuvent être différentes.

Excel est particulièrement mauvais en la matière. Ouvrir un tableur en l’enregistrant (sans rien faire ) peut générer un nouveau fichier, avec un contenu différent.


6
MD5 n'est plus considéré comme adéquat, c'est très vrai cryptographiquement, mais pour la vérification de l'unicité (en l'absence de malice, par exemple si vous contrôlez l'entrée), c'est agréable et rapide (et 128 bits devraient suffire)
Chris H

4
" Faites un suivi avec une comparaison octet par octet des deux fichiers. " Si vous voulez faire une comparaison de fichiers, vous pouvez également le faire en premier ... inutile de lire tous les fichiers pour calculer leur fichier. hashes seulement pour relire les deux fichiers pour les comparer!
TripeHound

3
@TripeHound Cela dépend si les fichiers sont à la fois locaux ou non ... si vous en avez déjà un et que vous introduisez un nouveau fichier dans le système, si le nouveau fichier nécessite quand même un hachage stocké dans une base de données, etc ... Faites l'appel qui convient à votre situation.
Attie

5
Non, ce n'est pas un jeu de probabilité. Vous sous-estimez à quel point une collision accidentelle est peu probable. Cela n'arrivera pas. Tourner un peu pendant la comparaison est plus probable. D'autre part, dans certains scénarios, une collision délibérée peut avoir lieu et ce n'est pas du tout un jeu de probabilité.
Gilles, arrête de faire le mal

3
@mbrig: un hachage 32 bits présenterait un risque important de discordance accidentelle. Le passage à 128 ou 256 bits fait toutefois une énorme différence. Avec 128 bits, un milliard de singes tapant chacun un milliard de documents de taille décente véritablement aléatoires auraient environ 0,3% de chances de créer deux documents avec le même hachage. Avec 256 bits, même si des milliards de singes pouvaient taper un milliard de documents aléatoires de taille décente par seconde pendant un milliard d'années, la probabilité que l'un de ces non-millions de documents ait des valeurs de hachage identiques par coïncidence serait extrêmement faible.
Supercat

6

Si deux fichiers ont le même hachage MD5 et qu'ils n'ont pas tous les deux été spécialement conçus, ils sont identiques. La difficulté de créer des fichiers avec le même hachage MD5 dépend du format de fichier. Je ne sais pas à quel point il est facile d'utiliser des fichiers Excel.

Donc, si vous avez des fichiers qui traînent et que vous voulez trouver des doublons, MD5 est sans danger. Si vous avez écrit l'un des fichiers et que l'autre fichier est d'origine douteuse, MD5 est toujours sécurisé (le seul moyen d'obtenir différents fichiers avec le même total de contrôle MD5 est de créer les deux fichiers). Si quelqu'un en qui vous ne faites pas confiance vous envoie une proposition de budget et envoie plus tard un autre fichier qu'ils prétendent être identique, alors MD5 risque de ne pas être suffisant.

Pour éviter tout risque, utilisez SHA-256 ou SHA-512 au lieu de MD5. Si deux fichiers ont le même hachage SHA-256, ils sont identiques. La même chose vaut pour SHA-512. (Il est théoriquement possible qu'ils soient différents, mais la probabilité que cela se produise accidentellement est tellement inférieure à la probabilité que votre ordinateur bascule un peu pendant la vérification qu'elle n'est tout simplement pas pertinente. En ce qui concerne quelqu'un qui crée délibérément deux fichiers avec le même hachage, personne ne sait comment faire cela pour SHA-256 ou SHA-512.)

Si deux fichiers Excel ont des hachages différents, ils sont différents, mais il est impossible de savoir de combien ils diffèrent. Ils peuvent avoir des données identiques mais un formatage différent, ou ils peuvent simplement différer dans les propriétés, ou ils peuvent avoir été enregistrés par des versions différentes. En fait, si Excel ressemble à Word, la simple sauvegarde d’un fichier met à jour ses métadonnées. Si vous souhaitez uniquement comparer les données numériques et textuelles et ignorer la mise en forme et les propriétés, vous pouvez exporter les feuilles de calcul au format CSV pour les comparer.

Si vous avez des outils Unix / Linux disponibles, vous pouvez utiliser cmppour comparer deux fichiers. Pour comparer deux fichiers sur le même ordinateur, les sommes de contrôle ne font que compliquer les choses.


Si deux fichiers ont le même hachage MD5 et qu'ils n'ont pas tous les deux été spécialement conçus, ils sont identiques. C'est inexact. Il y a une infinité de messages possibles, mais il n'y a que 2 ^ 64 hashs 64 bits possibles. C'est ce qu'on appelle le "principe de casier" : "le principe de casier stipule que si les narticles sont placés dans des mconteneurs, avec n > m, au moins un conteneur doit contenir plus d'un article". Si vous créez plus de 2 ^ 64 messages, vous aurez des collisions sans "artisanat spécial". Et vous pourriez avec juste 2.
Andrew Henle

@AndrewHenle, MD5 n’est pas en 64 bits, mais en 128. Si le fait de générer une collision accidentelle nous fait entrer dans les échelles de temps de la mort à la chaleur, c’est «possible» uniquement pour une définition extrêmement académique (et donc inutile) de celle-ci.
Charles Duffy

@ CharlesDuffy Vous supposez que le hachage est distribué au hasard. Ce n'est pas.
Andrew Henle

Etre effectivement équivalent à une distribution aléatoire fait partie de la définition de ce qui constitue un bon hachage cryptographique - vous devez effectuer beaucoup de mélanges pour une raison quelconque. Certes, il existe des algorithmes de hachage faibles, mais se concentrer sur ces faiblesses nous amène aux mises en garde précédemment énoncées concernant les attaques intentionnelles. (Ou êtes-vous en train de dire que MD5 n'a que 64 bits qui sont effectivement aléatoires? J'admets que je ne suis pas au courant, alors c'est plausible - lien s'il vous plaît?)
Charles Duffy

@ AndrewHenle Je ne dis pas qu'une collision est mathématiquement impossible, ce qui serait faux, mais non pertinent ici. Je déclare que ce n'est pas arrivé, ce qui est vrai. Votre commentaire est incorrect en une manière qui change complètement la donne. Il y a 2 ^ 128 hash MD5 possibles, pas 2 ^ 64. Cela signifie que vous devez générer 2 ^ 128 hachages pour être certain de générer une collision. En fait, par le paradoxe de l'anniversaire, 2 ^ 64 vous donnerait une chance macroscopique d'une collision entre les hachages générés (et non avec un hachage généré précédemment). Mais c’est une question discutable puisque nous savons créer une collision.
Gilles, arrête de faire le mal

6

Réponse courte: Un hachage cryptographique est censé vous aider à être raisonnablement sûr que les fichiers avec des hachages correspondants sont les mêmes. Sauf si délibérément conçu, les chances de deux fichiers légèrement différents ayant des valeurs de hachage similaires sont ridiculement faibles. Mais quand il s'agit de comparer et de vérifier des fichiers qui pourraient être délibérément falsifiés, MD5 est un mauvais choix. (Utilisez une autre fonction de hachage comme SHA3 ou BLAKE2.)

Réponse longue: Une fonction de hachage idéale est celle qui crée un hachage cryptographique presque unique pour une donnée unique. En d'autres termes, nous savons pertinemment qu'il existe deux fichiers dans cet univers dont les valeurs de hachage se rencontrent. La probabilité que ces deux fichiers se rejoignent naturellement est ridiculement petite.

Il y a dix ans, j'ai décidé de rester aussi longtemps que possible à partir de MD5. (Bien sûr, jusqu'à hier, je me suis souvenu de la mauvaise raison; dix années, c'est long, voyez-vous. J'ai réexaminé mes mémos antérieurs pour me rappeler pourquoi et j'ai édité cette réponse.) Vous voyez, en 1996, MD5 a été jugé être susceptible d'attaques de collision. 9 ans plus tard, les chercheurs ont pu créer des paires de documents PostScript et (ouch!) De certificats X.509 avec le même hash! MD5 était clairement cassé. (Megaupload.com utilisait également MD5 et il y avait beaucoup de bêtises autour des collisions de hasch qui me causaient des ennuis à l'époque.)

J'ai donc conclu que, même si MD5 était (et est toujours) fiable pour comparer des fichiers bénins, il faut absolument cesser de l'utiliser. Je pensais que le fait de s'y fier risquait de se transformer en indulgence et en une fausse confiance. Une fois que vous commencez à comparer des fichiers avec leurs hachages MD5, vous oubliez un jour l'empreinte de sécurité et comparez deux fichiers conçus délibérément pour avoir le même hachage. De plus, il était peu probable que les processeurs et les cryptoprocesseurs ajoutent un support.

Cependant, l’affiche originale a encore moins de raisons d’utiliser MD5, pour les raisons suivantes:

  1. Tant que l'on ne compare que deux fichiers, la comparaison octet par octet est en réalité plus rapide que la génération de son propre hachage MD5. Pour comparer trois fichiers ou plus ... eh bien, vous avez maintenant une cause légitime.
  2. L'OP a spécifié "des moyens de vérifier cela et sans installer un tas de plugins". La commande Get-FileHash de Windows PowerShell peut générer des hachages SHA1, SHA256, SHA384, SHA512 et MD5. Sur les ordinateurs modernes avec un support matériel pour les fonctions de hachage SHA, leur génération est plus rapide.

6
Vous pouvez créer votre propre fonction de hachage cryptographique de la longueur de votre choix, true; mais alors il a une longueur fixe et le principe du casier s’applique quand même. La réponse générale est: "en comparant leurs hachages uniquement, vous ne pouvez pas être sûr que les deux fichiers sont identiques".
Kamil Maciorowski

2
@ KamilMaciorowski En théorie, oui, je le peux. Ma fonction de hachage sur mesure peut simplement générer une copie du fichier le plus volumineux. Mais je n'ai aucun intérêt à en discuter davantage; La vérité est que vous avez voté à la baisse pour une raison qui équivaut à une farfelue simplement pour prouver que vous êtes plus intelligent. Maintenant, vous ne pouvez pas reprendre le vote.

Je suis d'accord avec @KamilMaciorowski ... C'est un jeu de probabilité ... en utilisant un seul hachage, vous pouvez être " raisonnablement sûr " que les fichiers avec des hachages identiques sont les mêmes, mais il n'y a pas de garantie à 100%. L'utilisation de meilleurs algorithmes ou l'utilisation de plusieurs algorithmes peuvent améliorer votre confiance. Même la comparaison des tailles de fichiers peut vous aider ... mais vous ne pouvez jamais être sûr à 100% sans vérifier octet par octet.
Attie

1
@ Attie Hein! C'est ce que je voulais dire à l'origine. Merci. 🙏 Seulement, je ne suis pas familier avec des phrases chics telles que "tu peux être raisonnablement confiant". Pardon. 😜 Pourtant, c'est pourquoi nous avons un bouton d'édition. Personnellement, je ne jetterais jamais une bonne réponse simplement parce qu’un mot est faux. Je l'édite

1
À propos de «supprimer une bonne réponse»: veuillez noter que j’ai tout d’abord assuré que ce n’était pas une faute de frappe et que vous le pensiez vraiment; puis, en même temps que je vous ai fait part de vos réactions, j'ai révélé ma raison dans l'espoir que votre réponse s'améliorera. C'est ce qui s'est passé, alors mon vote négatif n'est plus. Fondamentalement, je vous ai dit ce qui me semblait erroné dans votre réponse. Attie a aidé à clarifier, vous avez amélioré la réponse. De mon point de vue, nous avons tous géré la situation correctement et l’ensemble de la situation s’est très bien déroulée. Je vous remercie.
Kamil Maciorowski

5

J'ai 2 documents Excel et je veux vérifier s'ils sont exactement les mêmes, à part le nom du fichier.

D'un point de vue pratique, comparer directement les fichiers pour déterminer s'ils sont différents sera plus rapide que de calculer un hachage pour chaque fichier, puis de comparer ce hachage.

Pour calculer les hachages, vous devez lire l'intégralité du contenu des deux fichiers.

Pour déterminer s'ils sont identiques au moyen d'une comparaison directe, il vous suffit de lire le contenu des deux fichiers jusqu'à ce qu'ils ne correspondent pas. Une fois que vous avez trouvé une différence, vous savez que les fichiers ne sont pas identiques et vous n'avez plus besoin de lire les données d'un fichier.

Et avant cela, vous pouvez simplement comparer les tailles des deux fichiers. si les tailles diffèrent, le contenu ne peut pas être identique.


Lors de l'utilisation de deux fichiers sur un lecteur physique, l'utilisation d'une fonction de hachage capable de suivre la vitesse d'E / S de chaque fichier séparément peut être légèrement plus rapide que la comparaison des fichiers, car il ne serait pas nécessaire de basculer entre la lecture des deux fichiers. Cependant, l’endroit qui brille vraiment, c’est lorsque vous essayez de faire des comparaisons entre de nombreux fichiers trop volumineux pour tenir en mémoire. Même si vous voulez simplement savoir s'ils correspondent, comparez le fichier 1 au fichier 2, puis le fichier 1 au fichier 3, puis le fichier 1 au fichier 4, etc. peut être presque deux fois plus lent que le calcul de tous leurs hachages.
Supercat

@supercat Si les fichiers sont lus avec des morceaux supérieurs à un Mo ou plus, la permutation entre fichiers ne sera pas perceptible. Et si un flux de travail implique la comparaison d'un groupe de fichiers pour rechercher des doublons, le hachage peut aussi bien être calculé au fur et à mesure que chaque fichier est écrit.
Andrew Henle

Si l'un d'entre eux dispose de suffisamment d'espace pour mettre en mémoire tampon de gros morceaux de fichiers, les heures de commutation ne doivent pas être un problème, mais sinon, elles pourraient l'être. En ce qui concerne le calcul des hachages lors de l’écriture des fichiers, cela peut aller si on peut garantir que les fichiers ne pourront pas être modifiés sans modifier ou au moins invalider les hachages stockés. Si vous essayez d'éviter de sauvegarder des fichiers de manière redondante, le fait de ne regarder que les valeurs de hachage stockées peut entraîner la sauvegarde d'un fichier corrompu accidentellement, mais pas la tâche de sauvegarder les fichiers non corrompus auxquels le fichier corrompu devrait correspondre mais ne correspond pas .
Supercat

"Une fois que vous avez trouvé une différence, vous savez que les fichiers ne sont pas identiques" - pas nécessairement. Les fichiers XLSX sont des fichiers ZIP qui pourraient potentiellement stocker le contenu dans un ordre différent tout en conservant le même contenu. Mais même si vous les décompressez et comparez chaque fichier, le fichier XLSX contient des documents XML qui peuvent par exemple avoir des fins de ligne différentes sans affecter le contenu.
Thomas Weller

5

Les hachages tels que MD5 ou SHA ont une longueur fixe, disons qu'il s'agit de 300 caractères alphanumériques (en réalité, ils sont plus courts et n'utilisent pas l'ensemble des caractères alphanumériques).

Disons que les fichiers sont composés de caractères alphanumériques et que leur taille ne dépasse pas 2 Go.

Vous pouvez facilement voir qu'il y a beaucoup plus de fichiers (avec une taille maximale de 2 Go) par rapport aux valeurs de hachage possibles. Le principe de casier dit que certains fichiers (différents) doivent avoir les mêmes valeurs de hachage.

En outre, comme illustré sur shattered.io 1, vous pouvez avoir deux fichiers différents: shattered.io/static/shattered-1.pdf et shattered.io/static/shattered-2.pdf qui ont la même valeur de hachage SHA-1 tout en étant complètement différent.

1 SHA1 est un algorithme de hachage "plus fort" que md5


La probabilité de collisions accidentelles est trop faible pour être prise en compte. Le risque de collision délibérée existe également pour le MD5 et est pire que pour le SHA-1, ce qui n’est pas très pertinent ici.
Gilles 'SO- arrête d'être méchant'

4

NON. Différentes valeurs garantissent que les fichiers sont différents. Les mêmes valeurs ne garantissent pas que les fichiers sont les mêmes. Il est relativement facile de trouver des exemples avec CRC16.

Sur la balance des probabilités avec les schémas de hachage contemporains, ils sont les mêmes.


1
La question concerne le MD5, qui ne présente aucun risque de collision accidentelle. Il y a un risque de collision délibérée, mais ce n'est pas une question de probabilités.
Gilles, arrête de faire le mal.

1
Il s’agit également de feuilles de calcul Excel portant des noms différents. Quelle peut être la taille d’un octet pour la comparaison d’octets? Deux systèmes de hachage ensemble apporteraient une certitude.
mckenzm

2
@Gilles Tous les codes de hachage présentent un risque de collision accidentelle, par définition. La seule solution consiste à utiliser tout le fichier comme hashcode. Votre commentaire n'a aucun sens.
user207421

3

Cependant, votre question est à rebours. Supposons que le hachage signifie qu’ils ont les mêmes données (ce qui n’est pas garanti à 100%, mais est suffisant pour permettre toute une vie de comparaison de fichiers à la seconde pour ne pas déclencher une collision). Cela ne veut pas nécessairement dire qu'avoir les mêmes données signifie qu'ils auront le même hash. Donc non, vous ne pouvez pas comparer les données d'un fichier excel avec celles d'un autre fichier excel en hachant le fichier car il existe de nombreuses manières pour deux fichiers de différer sans que les données sous-jacentes soient différentes. Une manière évidente - les données sont stockées en XML, chaque cellule a son propre noeud XML. Si ces nœuds sont stockés dans des ordres différents, les données sont les mêmes mais le fichier est différent.


3

Pour ajouter les autres réponses, voici de nombreux exemples de couples de fichiers avec le même hachage MD5 et un contenu différent.


Tout à fait une réponse de lien, mais intéressant.
Thomas Weller

2

La réponse à ce PO a été donnée, mais pourrait faire l’objet d’un résumé.

Si vous voulez vérifier si deux fichiers sont identiques, beaucoup dépend de la question de savoir si les fichiers et les hachages sont sous votre contrôle.

Si vous générez vous-même les hachages à partir des fichiers et que vous êtes quasiment sûr que personne d'autre n'a eu l'opportunité / le talent / la motivation d'essayer délibérément de vous amener à la mauvaise conclusion, alors presque tout le hachage - même les hachages "connus comme cassés" comme MD5 et SHA1 sont presque certain d'être suffisant. Mais cela, je veux dire, vous pourriez générer des fichiers à grande vitesse pendant des millions d’années et il serait toujours peu probable que vous vous retrouviez avec deux fichiers réellement différents mais ayant le même hash. C'est presque certainement en sécurité.

C’est le scénario que vous avez lorsque vous voulez vérifier rapidement si deux répertoires de votre PC ou de votre serveur de fichiers ont le même contenu, si tous les fichiers d’un répertoire sont des doublons exacts, etc. été conçu / modifié illicitement, et vous faites confiance à votre application / utilitaire de hachage pour obtenir des résultats corrects.

Si vous vous trouvez dans un scénario où l'un des fichiers - ou un hachage précalculé - a peut-être été manipulé ou conçu pour vous tromper dans une conclusion erronée, vous avez besoin d'un hachage plus puissant (ininterrompu) et / ou d'une autre sécurité. Par exemple, si vous téléchargez un fichier et vérifiez s’il est valide en examinant un hachage, un attaquant pourra peut-être créer un fichier endommagé avec le hachage correct ou attaquer le site Web afin de placer un hachage incorrect lorsque vous recherchez le "droit". " (valeur attendue. Cela se résume à des problèmes de sécurité plus vastes.


2

Sur la ligne de commande Windows, vous pouvez utiliser l' computilitaire pour déterminer si deux fichiers sont exactement identiques. Par exemple:

comp fileone.xls filetwo.xls

1

Lorsque les hachages sont identiques, cela signifie-t-il que le contenu du fichier est identique à 1: 1?

Non . Si les valeurs de hachage sont différentes, il ne signifie pas que le contenu est différent. Des hashcodes égaux n'impliquent pas un contenu égal. Un hashcode est une réduction d'un grand domaine à une plage plus petite, par définition: l'implication est que des codes has sur un contenu inégal peuvent être égaux. Sinon, il ne servirait à rien de les calculer.


Sinon, il ne servirait à rien de les calculer. Si vous avez enfreint les lois des mathématiques et inventé une fonction de compression sans perte capable de compresser des données aléatoires, en violation du principe de la cascade, il serait très utile de l'utiliser! Il serait très pratique si un hachage de 128 bits ne représente unique tout le contenu d'un fichier. Même s'il n'y avait pas de fonction de décompression pour reconstituer le hachage dans le fichier, un hachage sans collision mathématiquement impossible serait bien d'avoir, par exemple, pour accélérer la recherche de dup dans les données non fiables comme dans les images de VM.
Peter Cordes

"Si les hachages sont différents, cela signifie que le contenu est différent." Pas nécessairement. Les fichiers XLSX sont des fichiers ZIP et il serait possible de stocker le même contenu dans un ordre de fichier différent.
Thomas Weller

1

Cette réponse se veut une carte pratique de scénarios qui peuvent ou ne peuvent pas se produire et des raisonnements que vous pouvez appliquer. Reportez-vous à d'autres réponses pour savoir pourquoi les fonctions de hachage fonctionnent de cette manière.


Une fois que vous avez choisi une fonction de hachage et vous y tenez, voici toutes les combinaisons à prendre en compte:

          |    identical   |   different    |
          |   hash values  |  hash values   |
----------+----------------+----------------+
identical |   can happen,  | cannot happen, |
  files   |     common     |   impossible   |
----------+----------------+----------------+
different |   can happen,  |   can happen,  |
  files   |      rare*     |     common     |
----------+----------------+----------------+

* rare, unless whoever generates (at least one of) the files
  purposely aims at this scenario

Le scénario dans lequel des fichiers identiques génèrent des valeurs de hachage différentes est le seul qui soit strictement impossible.


Deux raisonnements qui s'appliquent toujours :

  • Si les fichiers sont des valeurs de hachage alors identiques sont identiques à coup sûr .
  • Si les valeurs de hachage sont différentes, les fichiers le sont certainement .

Deux raisonnements qui ne sont pas stricts :

  • Si les fichiers sont différents, les valeurs de hachage sont probablement différentes.
  • Si les valeurs de hachage sont identiques, les fichiers le sont probablement .

0

Oui, un hachage identique signifie un fichier identique.

Comme d'autres réponses l'indiquent clairement, il est possible de créer 2 fichiers différents qui donnent le même hachage et MD5 n'est pas particulièrement robuste à cet égard.

Utilisez donc un algorithme de hachage plus puissant si vous envisagez de comparer un grand nombre de documents Excel ou si vous pensez que quelqu'un voudra manipuler la comparaison. SHA1 est meilleur que MD5. SHA256 est encore meilleur et devrait vous donner une confiance totale pour votre utilisation particulière.


-1

Les fichiers sont probablement identiques si leurs hachages sont identiques. Vous pouvez augmenter la confiance en modifiant les deux fichiers de manière identique (par exemple, en plaçant la même valeur dans la même cellule inutilisée), puis en comparant les hachages des fichiers modifiés. Il est difficile de créer une collision délibérée pour un fichier qui a été modifié d’une manière inconnue à l’avance.


Cela ne fonctionnera pas en raison de données supplémentaires stockées dans des fichiers Office. Vous devez, par exemple, placer le curseur dans la même cellule avant d’enregistrer, enregistrer à l’heure exacte, etc. Cependant, même dans ce cas, les fichiers XLSX sont des fichiers zip en interne. le fichier est identique mais le hash n'est pas
Thomas Weller

-2

Regardons cela d'une manière 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 affiche s'ils sont identiques ou non" et je lance le programme avec deux fichiers. "identique". Cela peut être dû à plusieurs raisons:

Les fichiers peuvent être identiques. Mon code peut avoir des bugs (un cas qui s’est réellement passé en pratique consistait à comparer deux hachages longs (256 octets) non pas avec memcmp mais avec strcmp: la comparaison retournera "pareil" si le premier octet de chaque hachage est nul, et c'est-à-dire 1 sur 65536. Il peut y avoir une défaillance matérielle (un rayon cosmique frappe une cellule de mémoire et la bascule) 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 l'erreur de programmeur, puis vient le rayon cosmique qui a modifié une variable booléenne avec le résultat de comparer les hachages de "false" à "true", 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 des fichiers identiques provenant de 10 000 utilisateurs en hachant chaque fichier et en recherchant un fichier avec un hachage identique déjà stocké sur le serveur. Ainsi, en cas de collision, un fichier ne sera pas sauvegardé, ce qui pourrait entraîner une perte de données. Quelqu'un a calculé qu'il est beaucoup plus probable qu'un météorite frappe votre serveur et détruit toutes les sauvegardes que de perdre un fichier, car sa somme de contrôle correspond à un fichier différent.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.