Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Chiffrement asymétrique avec python 3

+3 votes

Je cherche un moyen de chiffrer de manière asymétrique ( avec un jeu de clés publique/privé ) tel que le chiffrement RSA avec python 3.4.2 sous windows 7. J'ai cherché un peu des modules ou des solutions sur le net, mais je ne trouve pas satisfaction, par exemple le module RSA (lien ici) ne semble pas fonctionner sous windows (ou alors je ne sais pas comment l'installer et le faire fonctionner). J'ai un bon niveau en développement, mais je commence a peine en python, notamment sur l'installation et l'utilisation de modules, ou je suis assez perdu.

Donc je recherche un moyen de créer mes clés (ou utiliser des clés générés par openSSL (exemple en bas du post)), de crypter et de décrypter un message avec python 3. Et si cela implique l'utilisation d'un module externe, je voudrais également de l'aide sur l'installation de ce module.

Ex de clé publique openSSL:

-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANTJBNkjgVp+XW8V9vC2mzSDPCIHi8Nb
OqQUCmVnhV9K5RZ54ZjJZZqC2DKi8mzYj90F43SAwdz8RU8x+FEjKsMCAwEAAQ==
-----END PUBLIC KEY-----
demandé 1-Fev-2015 par fayak (292 points)
edité 2-Fev-2015 par max

3 Réponses

+3 votes
 
Meilleure réponse

Tu as aussi le module cryptography et ses primitives asymétriques: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/

(il fait beaucoup d'autres choses).

Pour l'install windows c'est ici : https://cryptography.io/en/latest/installation/#on-windows

répondu 2-Fev-2015 par Shadock (286 points)
sélectionné 4-Fev-2015 par fayak

+1. le module cryptography est maintenant la référence pour le chiffrement avec Python. Il possède un wheel pour windows et un simple pip install devrait marcher. Je gage qu'il sera intégré dans la stdlib un jour.

+1 vote

Ce que tu cherches, c'est probablement pycrypto: https://www.dlitz.net/software/pycrypto/ (et son module Crypto.PublicKey.RSA).

Pour l'installer sous windows il te faudra:

répondu 1-Fev-2015 par bulange (618 points)

Je conseille à la place du paquet mingw, celui de TDM-GCC :

http://tdm-gcc.tdragon.net/

Merci pour ton conseil, mais j'avoue avoir du mal à saisir l'installation du module. J'ai Dl et installé mingw, mais je n'ai aucune idée de comment m'en servir, ni même de son utilité. J'ai donc tenté d'installer le module avec "python setup.py install" avec l'invite de commande, résultant sur une erreur "unable to find vcvarsall.bat". Soit, je cherche sur un forum, manque de bol pycrypto n'est pas compatible avec une machine 64bit et cette installation la, il faut télécharger les binary sur le site. Chose faite, mais impossible d'installer, l'exe étant fait pour python 3.3, je possède python 3.4. Argh. Donc la je sèche, si tu as d'autres conseils à me fournir, je suis preneur, d'autant plus que ce module me semble intéressant et m'irait parfaitement. Merci encore pour ton aide

fayak> Question préliminaire: est-ce que tu as mingw dans ton path ?

Si oui essaye de lancer: python setup.py install --compiler=mingw32 pour voir si il préfère. :)

Bon après m'être inspiré de ce que tu m'as dis et de ce que j'ai pu trouvé sur le net, j'ai rebondi d'erreurs en erreurs, jusqu'à arriver a cette erreur qui me bloque et a laquelle je ne trouve pas de solution :

running install
running build
running buildpy
creating build
creating build\lib.win32-3.4
creating build\lib.win32-3.4\Crypto
copying lib\Crypto\pct
warnings.py -> build\lib.win32-3.4\Crypto
copying lib\Crypto_init.py -> build\lib.win32-3.4\Crypto
creating build\lib.win32-3.4\Crypto\Hash
.... Plein de lignes qui me semble pas importantes ...
copying lib\Crypto\Signature__init
.py -> build\lib.win32-3.4\Crypto\Signature
Skipping implicit fixer: buffer
Skipping implicit fixer: idioms
Skipping implicit fixer: set
literal
Skipping implicit fixer: wscomma
running build
ext
running build_configure
configure: line 546: sed: command not found
configure: line 1964: sed: command not found
checking for gcc... gcc
configure: line 2629: sed: command not found
configure: line 2629: sed: command not found
configure: line 2629: sed: command not found
checking whether the C compiler works... configure: line 2655: sed: command not
found
no
configure: line 2720: sed: command not found
configure: error: in /c/Users/cyril/Downloads/pycrypto-2.6.1/pycrypto-2.6.1': configure: error: C compiler cannot create executables Seeconfig.log' for more details
configure: line 366: sed: command not found
configure: line 318: sed: command not found
Traceback (most recent call last):
File "setup.py", line 456, in
core.setup(**kw)
File "C:\Python34\lib\distutils\core.py", line 148, in setup
dist.run_commands()
..Erreur python, je raccourci ...
File "C:\Python34\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "setup.py", line 278, in run
raise RuntimeError("autoconf error")
RuntimeError: autoconf error

Et la je sèche. J'ai lancé via python setup.py install , j'ai mis MinGW dans le path, je lance l'invite de commande en administrateur. Je sais pas quoi te dire de plus ou quoi faire, j'arrive pas a comprendre pourquoi un truc aussi simple que d'installer un module est aussi complexe Oo Bref, je ne comprend pas cet aspect de python, ça me dépasse, comme la compatibilité entre python 2 et 3. Merci de ton aide en tout cas.

Le log dit ça: configure: line 546: sed: command not found

Du coup, je crois qu'il va te falloir installer sed. Pour ma part, j'utilise GOW: https://github.com/bmatzelle/gow/releases (la dernière version 0.8.0).
N'oublie pas de mettre aussi tout ça dans ton PATH. Et réessaye pour voir!


En fait c'est compliqué pour pycrypto, car c'est un module qui dépend d'une partie écrite en c. Si c'était juste la partie python, ce serait bien plus simple, mais le c, il te faut un compilateur, les bonnes librairies, les bons outils, tout ça, tout ça!

Merci, j'ai installé GOW, retenté d'installer pycrypto, mais cette fois ci c'est au tour de 'sh' de ne pas être reconnu. Grrr. Faut-il encore installer un autre programme ? Je me sens désarmé, je navigue d'erreurs en erreurs pour installer un bête module.

+3 votes

Effectivement la librairie pycrypto est super
Un petit exemple de génération d'une paire de clé RSA 2048

from Crypto.PublicKey import RSA
from Crypto import Random

SIZE = 2048

rng = Random.new().read

rsa_key = RSA.generate(SIZE, rng)
rsa_priv = rsa_key.exportKey("PEM")
rsa_pub = rsa_key.publickey().exportKey("PEM")

rsa_priv et rsa_pub contiennent des strings représentant les valeurs des clés au format PEM.

Petite description des modules: https://github.com/dlitz/pycrypto/blob/master/Doc/pycrypt.rst
API: http://pythonhosted.org//pycrypto/

répondu 2-Fev-2015 par sepu (130 points)
...