Nov 21, 2024

Wiki

Python

Aide

edit SideBar

Search

Py Des

Présentation du module

Mise en oeuvre des chiffrements symétriques DES et Triple DES. Le Triple DES est codé à l'aide du DES, et peut se faire de deux manières :

  • DES-EDE2 (clé de 16 octets),
  • DES-EDE3 (clé de 24 octets).

Ce module est programmé en pur Python : il est donc portable, indépendant de la plateforme, mais ne convient pas à ceux nécessitant une version rapide de cet algorithme.

Concernant le Triple DES

Le Triple DES revient juste à lancer 3 fois le DES. La clé fournie, de 16 ou 24 octets, est séparée en 3 nouvelles clés, dépendant de la longueur de la clé originelle. Le Triple DES dépend lui aussi de cette taille...

DES-EDE3

Si une clé de 24 octets est fournie, le DES-EDE3 sera la méthode choisie pour le Triple DES :

  • Effectuer un chiffrement (Encryption) DES avec la première clé de 8 octets.
  • Effectuer un déchiffrement (Decryption) DES du résultat, avec la deuxième clé de 8 bits.
  • Réaliser, pour finir, un chiffrement DES de ce qui précède, avec la dernière clé (de 8 bits).

DES-EDE2

Si la clé originelle fait 16 octets, la méthode utilisée sera alors le DES-EDE2 : on retrouve encore trois applications du DES (chiffrement, déchiffrement, puis rechiffrement).

Seulement, les deux opérations de chiffrement utilisent cette fois-ci la même clé : celle correspondant aux 8 premiers octets.

Installation

Le module pyDes peut se télécharger ici.

  • Extraire le fichier .tar.gz
  • Lancer, dans le répertoire décompressé : python setup.py install

Exemple d'utilisation

  >>> import pyDes

Cas du DES

Notre clé sera "\0\0\0\0\0\0\0\0", constituée de 8 octets :

  >>> k = pyDes.des("DESCRYPT", pyDes.CBC, "\0\0\0\0\0\0\0\0")

On utilise la méthode encrypt pour chiffrer un message :

  >>> d = k.encrypt("Chiffrez-moi")
  Traceback (most recent call last):
    File "<input>", line 1, in <module>
    File "/usr/lib/python2.5/site-packages/pyDes.py", line 495, in encrypt
      return self.crypt(data, des.ENCRYPT)
    File "/usr/lib/python2.5/site-packages/pyDes.py", line 409, in crypt
      raise ValueError("Invalid data length, data must be a multiple of " + str(self.block_size) + " bytes\n. Try setting the optional padding character")
  ValueError: Invalid data length, data must be a multiple of 8 bytes. Try setting the optional padding character

Le texte à chiffrer doit avoir une longueur divisible par la taille de la clé :

  >>> d = k.encrypt("__Chiffrez-moi__")
  >>> print "Cryptogramme      : " + d
  Cryptogramme      : ~P��~D�F^P��j^R^^�{er
  >>> print "Chaîne déchiffrée : " + k.decrypt(d)
  Chaîne déchiffrée : __Chiffrez-moi__

(16 est bien divisible par 8). On peut aussi préciser, en deuxième argument, le caractère à utiliser pour compléter la chaîne jusqu'au prochain multiple :

  >>> d = k.encrypt("Chiffrez-moi",'*')
  >>> k.decrypt(d)
  'Chiffrez-moi****'
  >>> k.decrypt(d,'*')
  'Chiffrez-moi'

Cas du Triple DES

Pour le Triple DES, on procède de la même manière :

  >>> k = pyDes.triple_des("CleSecrete3DESDe24Octets")
  >>> d = k.encrypt("Chiffrez ces données sensibles", "*")
  >>> print "Cryptogramme      : " + d
  �8~@=kC
  >>> print "Chaîne déchiffrée : " + k.decrypt(d, "*")
  Chaîne déchiffrée : Chiffrez ces données sensibles

Le module pyDes en détail

Les constructeurs

Il y a deux constructeurs dans la classe pyDes :

pyDes.des(key, [mode], [IV])
pour le chiffrement DES,
pyDes.triple_des(key, [mode], [IV])
pour le chiffrement Triple DES.

Les arguments de ces constructeurs peuvent s'expliquer ainsi :

key
La clé, i.e. une chaîne de caractères de 8 octets pour le DES, et de 16 ou 24 octets pour le Triple DES (selon la méthode choisie).
mode
Argument optionnel pour le type de chiffrement. Ce peut être pyDes.ECB (Electronic Code Book) ou pyDes.CBC (Cypher Block Chaining).
IV
Argument optionnel (de 8 octets) à fournir si le mode CBC est choisi.

Les méthodes

Il y a deux méthodes dans la classe pyDes :

encrypt(data, [pad])
pour le chiffrement des données.
decrypt(data, [pad])
pour le déchiffrement.

Les arguments sont ici :

data
La chaîne de caractères à chiffrer/déchiffrer.
pad
Un argument optionnel, qui représente :
  • le caractère qui complètera la chaîne à chiffrer, si cette dernière n'est pas un multiple de 8 octets.
  • le caractère à supprimer à la fin de la chaîne déchiffrée, utile si le texte originel n'était pas de longueur multiple de 8 octets.

Page Actions

Recent Changes

Group & Page

Back Links