Hachage MD5 en Python
- Qu’est-ce que le hachage ?
- Qu’est-ce que le MD5 ?
-
Module Python
hashlib
- Utiliser l’algorithme 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.