Je n'ai pas trouvé le moyen de charger une clé privée RSA à partir d'un fichier PEM pour l'utiliser dans python-crypto (signature). Python-openssl peut charger un fichier PEM mais l'objet PKey ne peut pas être utilisé pour extraire des informations clés (p, q, ...) à utiliser avec Crypto.PublicKey.construct().Comment charger une clé RSA à partir d'un fichier PEM et l'utiliser dans python-crypto
Répondre
est-ce (près de) ce que vous avez essayé de faire?
public_key_filename = 'public_key.pem'
rsa = M2Crypto.RSA.load_pub_key(pk)
Cela devrait fonctionner. Le problème peut aussi être avec openssl, cela fonctionne-t-il lorsque vous utilisez simplement openssl (pas en Python)?
NOT * fonctionne pour moi – Kimvais
Cela ne peut pas fonctionner car load_pub_key() attend une ressource de fichier. Chargez les données dans un BIO en utilisant M2Crypto.BIO.MemoryBuffer (public_key_pem), et chargez une clé publique en utilisant M2Crypto.RSA.load_pub_key_bio (bio). –
Je recommande M2Crypto au lieu de python-crypto. Vous aurez besoin de M2Crypto pour analyser PEM de toute façon et son API EVP libère votre code de dépendant d'un algorithme particulier.
private = """
-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBANQNY7RD9BarYRsmMazM1hd7a+u3QeMPFZQ7Ic+BmmeWHvvVP4Yj
yu1t6vAut7mKkaDeKbT3yiGVUgAEUaWMXqECAwEAAQJAIHCz8h37N4ScZHThYJgt
oIYHKpZsg/oIyRaKw54GKxZq5f7YivcWoZ8j7IQ65lHVH3gmaqKOvqdAVVt5imKZ
KQIhAPPsr9i3FxU+Mac0pvQKhFVJUzAFfKiG3ulVUdHgAaw/AiEA3ozHKzfZWKxH
gs8v8ZQ/FnfI7DwYYhJC0YsXb6NSvR8CIHymwLo73mTxsogjBQqDcVrwLL3GoAyz
V6jf+/8HvXMbAiEAj1b3FVQEboOQD6WoyJ1mQO9n/xf50HjYhqRitOnp6ZsCIQDS
AvkvYKc6LG8IANmVv93g1dyKZvU/OQkAZepqHZB2MQ==
-----END RSA PRIVATE KEY-----
"""
message = "python-crypto sucks"
# Grab RSA parameters e, n
from M2Crypto import RSA, BIO
bio = BIO.MemoryBuffer(private)
rsa = RSA.load_key_bio(bio)
n, e = rsa.n, rsa.e
# In Python-crypto:
import Crypto.PublicKey.RSA
pycrypto_key = Crypto.PublicKey.RSA.construct((n, e))
# Use EVP api to sign message
from M2Crypto import EVP
key = EVP.load_key_string(private)
# if you need a different digest than the default 'sha1':
key.reset_context(md='sha256')
key.sign_init()
key.sign_update(message)
signature = key.sign_final()
# Use EVP api to verify signature
public = """
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANQNY7RD9BarYRsmMazM1hd7a+u3QeMP
FZQ7Ic+BmmeWHvvVP4Yjyu1t6vAut7mKkaDeKbT3yiGVUgAEUaWMXqECAwEAAQ==
-----END PUBLIC KEY-----
"""
from M2Crypto import BIO, RSA, EVP
bio = BIO.MemoryBuffer(public)
rsa = RSA.load_pub_key_bio(bio)
pubkey = EVP.PKey()
pubkey.assign_rsa(rsa)
pubkey.reset_context(md="sha256")
pubkey.verify_init()
pubkey.verify_update(message)
assert pubkey.verify_final(signature) == 1
Voir http://svn.osafoundation.org/m2crypto/trunk/tests/test_rsa.py, mais je préfère utiliser le vice-président exécutif algorithme indépendant API http://svn.osafoundation.org/m2crypto/trunk/tests/test_evp.py.
How do you verify an RSA SHA1 signature in Python? résout un problème similaire.
Cela ne fonctionne pas pour moi. Je reçois 'assert isinstance (n, long)' sur la ligne 'pycrypto_key = Crypto.PublicKey.RSA.construct ((n, e))'. n et e sont des chaînes - pas longtemps. Des idées? – bbrame
- 1. Charger un fichier PEM X509 dans Windows CryptoApi
- 2. iPhone: Comment créer un SecKeyRef à partir d'un fichier de clé publique (PEM)
- 3. Ouverture d'une clé privée RSA à partir de Ruby
- 4. besoin de créer un fichier .pem
- 5. Comment générer une clé publique et privée unique via RSA
- 6. Comment importer une clé publique RSA à partir de .NET dans OpenSSL
- 7. Comment vérifier une signature RSA SHA1 dans pyOpenSSL
- 8. RSA détection du type de fichier pubkey
- 9. Extrait clé publique du fichier cer à utiliser dans nusoap
- 10. Comment charger et exécuter un fichier lua à partir d'un autre fichier lua
- 11. Comment charger viewController à partir d'un fichier nib
- 12. comment charger une image à partir du Web dans Java
- 13. Comment obtenir une clé publique à partir d'un certificat dans le programme iPhone?
- 14. Comment charger un fichier org.w3c.dom.Document à partir de XML dans une chaîne?
- 15. Comment charger une police à partir d'un fichier dans un rapport RDLC?
- 16. Cryptage avec une clé privée RSA en Java
- 17. charger une bibliothèque dynamique à partir d'elisp
- 18. Comment combiner n et e pour créer la clé publique dans RSA?
- 19. Utilisation d'une clé privée cryptée codée PEM pour signer un message en mode natif
- 20. Charger une ligne à partir de NIB dans UIPickerView viewForRow
- 21. Comment charger à partir du chemin relatif dans l'application WPF?
- 22. Comment convertir une clé publique base64/radix64 en un format pem en python
- 23. Charger des parties de App.Config à partir d'un autre fichier
- 24. Comment générer une clé publique/privée RSA dans .Net, d'une longueur spécifique?
- 25. Comment charger un fichier JSON externe à partir d'un script sur une page Web?
- 26. Crypter un fichier avec RSA dans Visual Basic .NET
- 27. Comment utiliser SWFLoader uniquement à partir d'Actionscript dans Flex 3 et charger dynamiquement du contenu?
- 28. Charger dynamiquement des fonctions dans une classe à partir d'un fichier externe
- 29. Comment charger un fichier JAR à l'exécution
- 30. iPhone | Comment créer une clé unique à partir d'un NSTimeInterval?
En juillet 2014, le [Pack PEM] (http://www.cryptopp.com/wiki/PEM_Pack) a été ajouté à la bibliothèque Crypto ++. Le Pack PEM est une implémentation partielle du chiffrement des messages qui vous permet de lire et d'écrire des clés et des paramètres codés en PEM, y compris des clés privées cryptées. Les fichiers supplémentaires incluent la prise en charge des clés RSA, DSA, EC, ECDSA et des paramètres Diffie-Hellman. C'est un ajout à la bibliothèque, et ne fait pas partie de la bibliothèque proprement dite. Vous téléchargez un fichier ZIP et ajoutez cinq fichiers source à la bibliothèque. Ensuite, vous construisez la bibliothèque (Crypto ++ les récupère automatiquement). – jww
Connexe: [Charger la clé RSA privée codée PEM dans Crypto ++] (http://stackoverflow.com/questions/9815001/load-pem-encoded-private-rsa-key-in-crypto?rq=1) – jww