Hachage MD5 en Python

TJ Lerias 18 juillet 2021
  1. Qu’est-ce que le hachage ?
  2. Qu’est-ce que le MD5 ?
  3. Module Python hashlib
  4. Utiliser l’algorithme MD5 en Python
Hachage MD5 en Python

Cet article montrera comment utiliser le hachage MD5 à l’aide du module Python hashlib.

Qu’est-ce que le hachage ?

Un hachage est une fonction qui prend des données de longueur variable et les convertit en une longueur fixe. La valeur renvoyée par une fonction de hachage est appelée valeur de hachage, code de hachage ou condensé. Les valeurs de hachage sont généralement utilisées pour indexer une table de taille fixe appelée table de hachage.

Qu’est-ce que le MD5 ?

L’algorithme de résumé de message MD5 est une fonction de hachage populaire qui produit une valeur de hachage de 128 bits. Initialement conçu comme une fonction de hachage cryptographique, il est maintenant couramment utilisé pour vérifier l’intégrité des données en raison de multiples problèmes de sécurité et de vulnérabilités.

Module Python hashlib

La bibliothèque standard Python se compose d’un module qui implémente de nombreux algorithmes de hachage et de résumé de message sécurisés différents appelés hashlib. Il peut également inclure des algorithmes supplémentaires disponibles en fonction de la bibliothèque OpenSSL que Python utilise sur votre plate-forme.

Pour utiliser les algorithmes de hachage, importez le module hashlib.

import hashlib

Nous pouvons maintenant utiliser les algorithmes de hachage supportés par ce module. Pour vérifier les algorithmes de hachage disponibles dans l’interpréteur Python en cours d’exécution, utilisez l’attribut constant algorithms_available.

import hashlib

print(hashlib.algorithms_available)

Production:

{'md5', 'blake2s', 'sha256', 'sha384', 'sha3_512', 'blake2b', 'md4', 'md5-sha1', 'sha512_224', 'sha224', 'sha3_224', 'ripemd160', 'sha3_256', 'shake_256', 'sm3', 'shake_128', 'sha3_384', 'sha1', 'sha512_256', 'whirlpool', 'sha512'}

La liste ci-dessus sont les algorithmes disponibles dans hashlib, y compris les algorithmes disponibles d’OpenSSL

Pour vérifier les algorithmes de hachage garantis sur toutes les plateformes par ce module, utilisez l’attribut constant algorithms_guaranteed.

import hashlib

print(hashlib.algorithms_guaranteed)

Production:

{'sha3_256', 'sha256', 'sha3_224', 'sha224', 'blake2s', 'sha3_512', 'shake_128', 'sha512', 'sha3_384', 'shake_256', 'md5', 'blake2b', 'sha384', 'sha1'}

Remarque : md5 est dans la liste des algorithms_guaranteed, mais certains fournisseurs en amont conforme à la FIPS proposent une version Python qui l’exclut.

Utiliser l’algorithme MD5 en Python

Pour utiliser l’algorithme md5, nous allons utiliser le constructeur md5() et alimenter l’objet de hachage avec des objets de type octet en utilisant la méthode update() ou passer les données en paramètre du constructeur.

Pour obtenir la valeur de hachage, utilisez la méthode digest(), qui renvoie un condensé d’objet bytes des données fournies à l’objet de hachage.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.digest())

Production:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

Vous pouvez également passer les données en paramètre au constructeur et obtenir la valeur de hachage

import hashlib

print(hashlib.md5(b"Hello World").digest())

Production:

b'\xb1\n\x8d\xb1d\xe0uA\x05\xb7\xa9\x9b\xe7.?\xe5'

Similaire à la méthode digest(), vous pouvez également utiliser hexdigest(), qui renvoie un objet chaîne du résumé contenant uniquement des chiffres hexadécimaux.

import hashlib

md5_hash = hashlib.md5()
md5_hash.update(b"Hello World")

print(md5_hash.hexdigest())

Production:

b10a8db164e0754105b7a99be72e3fe5

Notez qu’il y a un b avant le littéral de chaîne passé à la méthode update(). Il est utilisé pour créer une instance de type bytes au lieu de type str. Comme la fonction de hachage n’accepte qu’une séquence d’octets en tant que paramètre. Le passage d’objets chaîne à la méthode update() n’est pas pris en charge.

Vous pouvez également faire plusieurs appels à la méthode update(), ce qui équivaut à un seul appel avec tous les arguments concaténés.

import hashlib

first_hash = hashlib.md5()
first_hash.update(b"Hello World, Hello Python")
print(first_hash.hexdigest())

second_hash = hashlib.md5()
second_hash.update(b"Hello World,")
second_hash.update(b" Hello Python")
print(second_hash.hexdigest())

Production:

b0f2921c8c0e63898b0388777908893a
b0f2921c8c0e63898b0388777908893a

En résumé, on peut utiliser l’algorithme de hachage md5 via le module hashlib qui peut être alimenté en données en le passant en paramètre du constructeur md5() ou en utilisant la méthode update(). Nous pouvons obtenir la valeur de hachage en utilisant la méthode digest(), qui renvoie un objet bytes de la méthode digest() ou hexdigest(), qui renvoie un objet chaîne du digest contenant uniquement des chiffres hexadécimaux.