Tout transfert de données sur le Net nécessite de vérifier l’authenticité des fichiers qui transitent sur le réseau. Les sommes de contrôle, telles MD5 ou SHA viennent à la rescousse. Cependant, il est aussi fréquent d’appliquer ce genre de traitement à des arborescences complètes de fichiers, en prévision de leur copie sur un autre média (cd, dvd, disque, etc …).
Je n’avais jamais l’outil adéquat capable de générer et de vérifier tout type de somme de contrôle sous la main. Heureusement, Python propose depuis la version 2.5 la bibliothèque hashlib encapsulant les fonctions de la librairie openssl.
Sauf qu’écrire un script à chaque utilisation spécifique, même si celà ne prend que quelques minutes, c’est réinventer périodiquement la roue. J’ai donc décidé d’écrire un script pour combler cette lacune : ainsi est né pySummer. Ce code ressemble plus à un script qu’à un module, il est tout frais développé, donc largement améliorable … il a surtout le mérite d’exister et de rendre service !
L’idée est donc de proposer les algorithmes fournis par le module haslib de Python, non seulement sur de simples fichiers mais aussi de manière récursive sur une arborescence de répertoires. J’ai même essayé de proposer un moyen de deviner le type de somme de contrôle, lors de la vérification des sommes.
En ligne de commande, celà donne :
Usage: pySummer.py [options] arg
Options:
-h, –help show this help message and exit
-r recursively calculate checksums
-c check sums
–hash=HASHNAME select hash algorithm
Soit pour une arborescence :
la création des sommes (SHA-1 par défaut) :
$ python pySummer.py -r my_topdir/ > file.sums
ou
$ python pySummer.py –hash sha224 -r my_topdir/ > file.sums
la vérification des sommes (avec détection automatique) :
$ python pySummer.py -c file.sums (évidemment, il faut être dans le “bon” répertoire, car les chemins stockés sont relatifs. Le comportement est identique à celui des outils classiques comme md5sum, sha1sum, etc …)
Pour les téléchargements, c’est par ici !
Commentaires, améliorations sont les bienvenues.