jeudi 23 août 2007

Perl Win32 + MD5

Bon, je ne vais pas entrer dans le débat MD5 / SHA1 / Whirlpool ou autres algos de hash, ce n'est pas mon but. En fait je me suis fait un petit script (en perl sous Windows) pour chercher et supprimer des fichiers en double sur mon disque. Je me contente d'utiliser (pour le moment ?) MD5 pour faire un hash de chaque fichier, le stocker dans un %hash perl et voir à chaque fichier si j'ai pas déjà vu ce hash quelque part, et si c'est le cas, supprimer un des deux fichiers. Le truc, c'est que plus d'une minute pour 125mo de fichiers (répartis sur environ 800 fichiers, dans le dossier dans lequel j'ai testé) c'est looooong. Faudrait que je teste avec d'autres algos de hash, pour faire un comparatif.
Puis tester la même chose en C aussi, ça pourrait être amusant ...
Bien sûr, il fait également un temps pourri pour un mois d'août. En fait il a fait un temps pourri tout l'été. Par conséquent, vivement cet hiver; en effet, un hiver à 40°C, moi je crache pas dessus. Passer Noël en slip sur la plage, ça doit être fabuleux (rah la chance qu'ils ont les australiens quand même)

8 commentaires:

Anonyme a dit…

Essaie avec un TIGER hash peut être :
http://www.cs.technion.ac.il/~biham/Reports/Tiger/

C'est un peu plus rapide que MD5 et SHA1 et il y a moins de chances d'avoir de collisions, l'algorithme ne connaît actuellement presque aucune faiblesse.

Bref, que des avantages.

MeiK a dit…

Ok je vais regarder ça, merci bien anonymous ;)

Vincent a dit…

J'aurais pas hashe "by default" si j'etais toi.
Vu tes besoins, un truc qui verifie quelques octets au hasard, et qui fait un comparatif par hash + taille aurait largement suffit (et niveau perf tu vas y gagner mechamment).
Apres ya peut-etre des choses que tu ne nous dis pas ^-^.

Vincent a dit…

Pardon,
"qui fait un comparatif par hash + taille" quand les octets testes sont matche.
Plus comprehensible. Une sorte de pre-test quoi.

Anonyme a dit…

Vérifier des octets au hasard avec un hash, c'est risqué. Si deux fichiers ont beaucoup d'octets en commun et la même taille ça craint. Certes, c'est rare...tout dépend des besoins.

Vincent a dit…

Je me doutais bien que je m'exprimais mal. Le hash tu le fais sur le fichier en entier evidemment.

Plus simple. Tu ne fais les comparatifs de hash que s'ils ont exactement la meme taille.
C'est tout aussi efficace, et on y gagne en optimisation.

MeiK a dit…

Ouais, j'y avais pensé aussi à ça. Des fichiers qui font pile poil la même taille c'est déjà peu fréquent (je parle à l'octet près), donc à ce niveau là ouais ça serait plus rapide.
D'autant que de toutes manières le fait de faire ça en perl, à mon avis, ça aide pas beaucoup :)

Anonyme a dit…

Je pense comme tu le disais au début, que ça vaudrait le coup de le faire en C, ça doit pas être trop compliqué.

bon courage pour la suite.