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.xls
et 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?
cmp
Unix oufc
(comparaison de fichiers) sous Windows.diff -s file1 file2
si 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.Réponses:
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:
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 decré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.
la source
diff
utilitaire 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.diff -s
pour vérifier si les fichiers CSV sont identiques. En fait, vous pouvezdiff -s
même utiliser les fichiers Excel: sidiff
vous dites qu'ils sont identiques, vous n'avez pas besoin de passer à la comparaison CSV.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.
la source
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:
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.
la source
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
cmp
pour comparer deux fichiers. Pour comparer deux fichiers sur le même ordinateur, les sommes de contrôle ne font que compliquer les choses.la source
n
articles sont placés dans desm
conteneurs, avecn > 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.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:
la source
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.
la source
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 source
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.
la source
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.
la source
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.
la source
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.
la source
Sur la ligne de commande Windows, vous pouvez utiliser l'
comp
utilitaire pour déterminer si deux fichiers sont exactement identiques. Par exemple:la source
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.
la source
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:
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 :
Deux raisonnements qui ne sont pas stricts :
la source
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.
la source
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.
la source
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.
la source