MD5 en Bash, PHP, Python et Javascript


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()

7 thoughts on “MD5 en Bash, PHP, Python et Javascript

  • All-o

    Sinon en php il y a la fonction md5_file() qui est bien plus simple pour les fichiers.

    Si vous tenez vraiment a utiliser fopen(), “rb” serait plus adapté comme mode pour éviter les ennuis d’encodage justement.

  • Oko

    Note pour Python et les fichiers: ne pas utiliser tel-quel pour les BD-Rip, le code ci-dessus charge tout en RAM.

    >>> import hashlib
    >>> m = hashlib.md5()
    >>> m.update("Nobody inspects")
    >>> m.update(" the spammish repetition")
    >>> m.digest()

    PS: pas de preview des commentaires ?

  • Sam Post author

    @All-o et @le hollandais volant:

    md5_file est non seulement plus facile, mais également plus performant puisque comme Oko le souligne, lire le fichier d’un coup charge tout en mémoire.

    @oki:

    Oui, pour les gros fichiers en Python il vaut mieux faire un truc du genre:

    for x in f.read(500):
        hash.update(x)
  • tsez

    “On peut éviter ça en utilisant une appache par morceaux”

    une approche

  • Sam Post author

    Non, on prend un serveur Apache, on le découpe en petits morceaux, et pour, un md5 !

  • Linda Dixon

    You can use Jquery instead which is way easier:

    var Pass = “Your_password”;

    var md5 = $.md5(Pass);

    console.log(md5); // 3df11a12265e10434edcbea4de121dec

    You can also look for other examples and languages in here: md5-sha.com which have also some hashing/cracking tools.

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.