Page 1 sur 1

[Ex] Hash compare

Posté : ven. 17 déc. 2010 12:34
par matwachich
Voila un petit script que j'ai fait à cause d'une gravure qui a planté lors de la vérification. Je me suis retrouvé avec un DVD gravé à 100% mais dont la fiabilité n'était pas sure, et comme les données était sensibles et que je devait les supprimer de mon PC pour libérer de l'espace, j'ai fait ce petit truc tout simple qui compare les Hash de 2 fichiers:

Il suffit de faire glisser les 2 fichiers à comparer sur la fenêtre et la vérification se lance, un appui sur Escape réinitialise la liste des 2 fichiers à comparer si on en a fait glisser qu'un et qu'on se rend compte que c'est pas le bon.

PS: juste une question: j'ai utilisé $CALG_MD2 comme algorithme de hachage, est que c'est le plus rapide?

Re: [Ex] Hash compare

Posté : ven. 17 déc. 2010 13:28
par Colin117
Le problème c'est: est-ce que cela va marcher avec tout les hash ? enfin ça marche qu'avec les ISO le md2 non ?

Re: [Ex] Hash compare

Posté : ven. 17 déc. 2010 13:49
par jchd
Ce n'est surtout pas pour dévaloriser ni minimiser la valeur de ton développement, mais je signale au passage un petit logiciel bien pratique et open source à celles et ceux qui ne le connaîtraient pas encore. Il doit être automatisable par Autoit sans problème, si besoin.

Re: [Ex] Hash compare

Posté : ven. 17 déc. 2010 14:12
par matwachich
Je savait qu'il devait exister déjà des logiciels qui font la même chose, mais je voulait un truc HYPER simple pour comparer les fichiers gravés à ceux sur le disque dur, pour être sure qu'il sont bien gravés et que je pouvait les supprimer.
Karen's Hasher est plus complet certes, mais il demande beaucoup plus de cliques pour comparer 2 fichiers que mon petit script.
Et puis je n'ai pas télécharger Karen's mais je ne vois (sur le screen du site) aucune commande pour COMPARER 2 fichiers, seulement pour hacher des fichiers, après je pense qu'il faut les comparer à la main (à l'oeil plutôt! :P ).

@Colin: On peut hacher n'importe quel fichier avec n'importe quel algorithme.

Re: [Ex] Hash compare

Posté : ven. 17 déc. 2010 18:37
par timmalos
J'ai fais quelque tests avec une fonction _sha1 de bas niveau et les resultats sont sans appel:

Pour un fichier de 19 Megas:
C:\Users\tim\Desktop\Usb suite\UDFs\WinAPIEx.au3
> File 1 set.
C:\Users\tim\Desktop\Usb suite\UDFs\WinAPIEx.au3
> File 2 set.
> Starting...
> Hashing File 1...
> Done! (0x534013C96C22B4A29847FC331613152A) in (ms) :5563.91603357579
> Done! (bddb55a52c8529a82f0f5eff74e578551478db2b) in (ms) :12.9753955895685
> Hashing File 2...
> Done! (0x534013C96C22B4A29847FC331613152A) in (ms) :5539.42662850478
> Done! (bddb55a52c8529a82f0f5eff74e578551478db2b) in (ms) :12.9835758871773
> Hash OK!
> =============================================
La 2eme ligne est du sha1 et les resultats sont 463 fois plus rapides avec ma fonction ;)
Je vais d'ailleurs la mettre ci-dessous après t'avoir donné l'eau à la bouche:
► Afficher le texte
Attention, je n'ai pas dis que Sha1 était plus rapide que MD2, cela dépend de leur implementation uniquement, et ici on utilise une dll de bas niveau ce qui explique la différence enorme de temps ;)
Si tu arrives à trouver l'OpCode de MD2 tu pourras comparer avec le meme algorithme la difference de temps devrait être equitable.

Re: [Ex] Hash compare

Posté : ven. 17 déc. 2010 19:44
par Tlem
Bien, puisque tout le monde s'y met ... :roll:

Alors moi je propose deux choix :

1 - L'utilisation du programme en ligne de commande : MD5.exe
2 - L'utilisation d'un script en 'pure AutoIt'.

Sur le matériel dont je dispose (C2D 1.66 Ghz et disque SSD), la création du hash MD5 d'un fichier de 299 Mo a été généré en :
  • 1 - Avec MD5.exe en 2134 ms
    2 - Pure AutoIt en 5222 ms
Je met en fichier joint les éléments utilisés (en dehors du fichier de 300Mo :roll: )
Le programme MD5.exe est disponible ici : http://www.fourmilab.ch/md5/
Et la fonction MD5.au3 provient de ce message : http://www.autoitscript.com/forum/topic ... e__hl__md5
Vous y trouverez d'ailleurs d'autres type de contrôle. ;)

Voilà, il reste plus qu'à faire son choix.

Re: [Ex] Hash compare

Posté : sam. 18 déc. 2010 15:38
par jchd
Attention, je n'ai pas dis que Sha1 était plus rapide que MD2, cela dépend de leur implementation uniquement, et ici on utilise une dll de bas niveau ce qui explique la différence enorme de temps ;)
Si tu arrives à trouver l'OpCode de MD2 tu pourras comparer avec le meme algorithme la difference de temps devrait être equitable.
Attention à ce mode de comparaison : le premier run sur un fichier risque bien de fonctionner en lisant depuis le disque, alors que le second est garanti de ne lire que le cache Windows et/ou buffer disque. Plutôt que s'embêter à vider les caches (ce qui n'est pas trivial) il faut lancer deux runs de suite sur le même fichier avec un même algo et ne chronométrer que le second run.

Sur des fichiers plus gros que les caches (dont on ne connaît pas toujours la taille avec précision et encore moins la méthode d'emploi), il faut même parfois lancer 3, 4 ou plus de fois le même job pour voir les temps se stabiliser à un minimum.

Re: [Ex] Hash compare

Posté : sam. 18 déc. 2010 18:01
par timmalos
En effet, je ne l'ai pas precisé mais c'est bien sur le 2ème essai que j'ai calculé les temps. Je n'ai pas le code sous la main n'etant pas sur ma machine, mais je le deposerai si quelqu'un le veux.

Re: [Ex] Hash compare

Posté : ven. 21 janv. 2011 11:27
par TommyDDR
Histoire de mettre mon grain de sel ^^, vous pouvez réduire votre fonction "_out" à une seul ligne :

Code : Tout sélectionner

Func _out($data)
    GUICtrlSetData($out, "> " & $data & @CRLF, 1)
EndFunc
Le paramètre "1", signifie : "Ajoute à la fin de l'ancien".