May 20, 2024

Wiki

Python

Aide

edit SideBar

Search

Hashlib


Source : PyMOTW.

Présentation

Fonctions cryptographiques de hachage : md5 et sha(s). La bibliothèque utilisée par ce module est OpenSSL.

Pour utiliser un des algorithmes de hachage suivants :

il faut appeler le constructeur associé, pour créer un objet hash. Le reste (l'interface de l'API) ne dépend plus du choix de la fonction de hachage.

Exemple d'utilisation : md5

Pour calculer le condensé md5 d'un bloc de données (par exemple, une chaîne ASCII), cela se passe en trois temps :

  • créer l'objet hash,
  • ajouter les données à condenser,
  • exécuter la condensation.

Par exemple :

  >>> import hashlib
  >>> h = hashlib.md5()
  >>> h.update('coucou')
  >>> print h.hexdigest()
  721a9b52bfceacc503c056e3b9b93cfa

On utilise la méthode hexdigest() dans ce qui précède, parce que la sortie de cette méthode est ici sensée être affichée.

Si, pour l'utilisation que l'on souhaite en faire, un condensé binaire est préférable, alors il faudra utiliser la méthode digest() :

  >>> print h.digest()
  r��R�ά���V㹹<

Cas du SHA-1

Pour la fonction de hachage SHA-1, on procède exactement de la même manière :

  >>> import hashlib
  >>> h = hashlib.sha1()
  >>> h.update('coucou')
  >>> print h.hexdigest()
  5ed25af7b1ed23fb00122e13d7f74c4d8262acd8

Comme il a été précisé plus tôt, les méthodes sont les mêmes : seul le constructeur change.

new()

Il peut être parfois plus pratique de faire référence directement au nom de l'algorithme de hachage (une chaîne de caractères, donc), plutôt qu'à un constructeur dépendant du condensé choisi.

(On peut, par exemple, imaginer vouloir stocker le nom de l'algorithme utilisé dans un fichier de configuration.)

Dans ce cas, il vaut mieux utiliser la fonction new(), comme suit :

  >>> import hashlib
  >>> h = hashlib.new('sha256')
  >>> h.update('coucou')
  >>> print h.hexdigest()

Appeler update() plus d'une fois

On peut appeler la méthode update() plusieurs fois.

Dans ce cas, il n'y a pas "remise à zéro" : le nouveau texte clair est ajouté à l'ancien, et c'est la valeur hachée du tout qui est retournée, comme l'illustre l'exemple suivant :

  >>> import hashlib

  >>> h=hashlib.md5()
  >>> h.update('Un')
  >>> h.hexdigest()
  '80a9a9f289a503c7e4218d1c34e05a02'
  >>> h.update('Deux')
  >>> h.hexdigest()
  '78dfde402ec1b856bd5be804a0da7ffe'

  >>> hh=hashlib.md5()
  >>> hh.update('UnDeux')
  >>> hh.hexdigest()
  '78dfde402ec1b856bd5be804a0da7ffe'

Dans ce qui précède, le condensé résultant de update('Un') suivi de update('Deux') est exactement le même que celui de update('UnDeux').

Cela peut servir quand le texte à condenser est grand : on pourra alors le lire morceau par morceau, et ainsi ne pas encombrer inutilement la mémoire.

Page Actions

Recent Changes

Group & Page

Back Links