Jul 02, 2026

Wiki

Python

Aide

edit SideBar

Search

Une Page Au Hasard

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


This page may have a more recent version on pmwiki.org: PmWiki:UnePageAuHasard, and a talk page: PmWiki:UnePageAuHasard-Talk.

Page Actions

Recent Changes

Group & Page

Back Links