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$.
Avant toutes choses...
>>> import rsa
>>> rsa.gen_keys(50)
>>> (publique,privee)=rsa.gen_pubpriv_keys(64)
  {'e': 3926465531L, 'n': 20965207183557945172501062515951419847L}
  >>> privee
  {'q': 2680421942966712071L, 'p': 7821607056519425857L, 'd': 2906577419456908926296958718178414771L}
A chaque fois, donc, le résultat est un dictionnaire.
Pour chiffrer et déchiffrer :
  >>> cryptogramme = rsa.encrypt('toto',publique)
  >>> cryptogramme
  'eJwFwakRACAQA0BPJSiGS+4hPdAEHkH/it1+n7Vt1CogPAjBUxUuKnOSXknVmobdzvgBdQpI'
  >>> rsa.decrypt(cryptogramme,privee)
  'toto'
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