May 20, 2024

Wiki

Python

Aide

edit SideBar

Search

Rsa

Présentation

Trouvé sur pypi.python.org, le Python Package Index.

Ce module calcule de grand nombres premiers, en vue d'un chiffrement/déchiffrement, d'une signature et d'une vérification par méthode RSA. Il permet aussi la génération de clé publiques et privées.

On rappelle la méthode : soit $p,q$ deux grands nombres premiers, de produit $N=pq$, et d,e deux entiers tels que $de = k(p-1)(q-1) % N$.

Alors pour tout nombre $x$ (donc tout texte), on a $\left(x^e\right)^d = x % N$.

  • Le clairtext est $x$ (texte codé en nombre, avec une table ASCII par exemple).
  • Le cryptogramme est alors $X=x^e %N$.
  • Pour déchiffrer $X$, on l'élève à la puissance $d$ (modulo $N$) : $X^d %N$...et l'on retrouve le clairtexte $x$ !

Utilisation

Importation

Avant toutes choses...

  >>> import rsa

Génération d'une clé

  • Pour générer une clé RSA de n bits, c'est-à-dire un quadruplet (p,q,e,d) :
  >>> rsa.gen_keys(50)
(44443727669977L, 118305200237593L, 1582949, 493586504384730269325322541L)
  • Pour obtenir un couple clé publique (ee), clé privée (dd), par exemple de 64 bits, utiles aux méthodes de chiffrement et déchiffrement du module rsa :
  >>> (publique,privee)=rsa.gen_pubpriv_keys(64)
>>> publique
  {'e': 3926465531L, 'n': 20965207183557945172501062515951419847L}
  >>> privee
  {'q': 2680421942966712071L, 'p': 7821607056519425857L, 'd': 2906577419456908926296958718178414771L}

A chaque fois, donc, le résultat est un dictionnaire.

Chiffrement et déchiffrement

Pour chiffrer et déchiffrer :

  >>> cryptogramme = rsa.encrypt('toto',publique)
  >>> cryptogramme
  'eJwFwakRACAQA0BPJSiGS+4hPdAEHkH/it1+n7Vt1CogPAjBUxUuKnOSXknVmobdzvgBdQpI'
  >>> rsa.decrypt(cryptogramme,privee)
  'toto'

Signature

Pour signer un message avec sa clé privée :

  >>> signature = rsa.sign('toto',privee)
  'eJzTyCkw5PIxNzAzM7E0tjQ0MDezNDMwMDQytbCwNDI3MTU1NzS0MLU0NDEz9eFK1AMA9rwKEQ=='

Et pour vérifier :

  >>> rsa.verify(signature,publique)
  'toto'

Et si on modifie un poil la signature...

  >>> signature = 'f'+signature[1:]
  >>> signature
  'fJzTyCkw5PIxNzAzM7E0tjQ0MDezNDMwMDQytbCwNDI3MTU1NzS0MLU0NDEz9eFK1AMA9rwKEQ=='
  >>> rsa.verify(signature,ee)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib/python2.5/site-packages/PIL/__init__.py", line 440, in verify  
    File "/usr/lib/python2.5/site-packages/PIL/__init__.py", line 414, in gluechops
    File "/usr/lib/python2.5/site-packages/PIL/__init__.py", line 377, in unpicklechops
    zlib.error: Error -3 while decompressing data: incorrect header check

Page Actions

Recent Changes

Group & Page

Back Links