Sam & Max » md5 http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 MD5 en Bash, PHP, Python et Javascript 6 http://sametmax.com/md5-en-bash-php-python-et-javascript/ http://sametmax.com/md5-en-bash-php-python-et-javascript/#comments Mon, 18 Jun 2012 17:33:17 +0000 http://sametmax.com/?p=936 Bien que pour tout ce qui touche à la sécurité (comme les mots de passe ou les signatures) il vaille mieux préférer des fonctions plus sécurisées comme SHA-2, MD5 reste très pratique pour vérifier l’intégrité d’un fichier ou pour éviter les doublons.

Bash

echo -n "chaine à hasher" | md5sum

(N’oubliez pas -n sinon vous aurez un saut de ligne ajouté à la chaîne.)

ou

md5sum /fichier/a/hasher

Python

>>> import hashlib
>>> hashlib.md5('chaine à hasher').hexdigest()

ou

>>> import hashlib
>>> hashlib.md5(open("/fichier/a/hasher").read()).hexdigest()

La lib hashlib contient également des fonctions pour les hashs sha1, sha224, sha256, sha384 et sha512.

PHP

echo md5("chaine a hasher");

ou

echo md5(fread(fopen('/fichier/a/hasher', 'r'), TAILLE_DU_FICHIER));

A noter que l’encodage du terminal et code jouent sur le résultat. Rappelez-vous aussi que PHP et Python n’utilisent pas UTF-8 par défaut.

Javascript

Il n’existe pas de fonction cross-browser qui permette de récuperer le hash MD5 d’une chaîne, mais on peut utiliser des bibliothèques externes. La plus connue est celle de Paul Johnston que nous utilisons pour créer les hashs visuels de Vizhash.js, et donc dans 0bin.

On insère le code:

<script type="text/javascript" src="md5.js"></script>

Puis:

alert(hex_md5('chaine a hasher'));

Comme Javascript n’a pas normalement accès au système de fichiers, il n’y a pas de version qui permette de calculer la somme de contrôle d’un fichier directement.

UPDATE après commantaires:

Pour éviter les problèmes liés à l’encoding, il vaut mieux ouvrir le fichier en mode binaire: fopen('fichier', rb') et open('fichier', 'rb') en PHP et Python.

Pour PHP, peut utiliser directement md5_file pour calculer le MD5 d’un fichier.

Pour Python, dans le cas de gros fichiers, utiliser read() charde tout le contenu en mémoire. On peut éviter ça en utilisant une approche par morceaux, telle que:

hash = md5()
with open('fichier') as f:
    for chunk in f.read(500):
        hash.update(chunk)
print hash.hexdigest()
]]>
http://sametmax.com/md5-en-bash-php-python-et-javascript/feed/ 6