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