Ho generato una privata e una chiave pubblica con i seguenti comandi:Come caricare in Python-RSA una chiave RSA pubblica da un file generato con openssl?
openssl genrsa -out private_key.pem 512
openssl rsa -in private_key.pem -pubout -out public_key.pem
Allora ho provato a caricarli con uno script python utilizzando Python-RSA:
import os
import rsa
with open('private_key.pem') as privatefile:
keydata = privatefile.read()
privkey = rsa.PrivateKey.load_pkcs1(keydata,'PEM')
with open('public_key.pem') as publicfile:
pkeydata = publicfile.read()
pubkey = rsa.PublicKey.load_pkcs1(pkeydata)
random_text = os.urandom(8)
#Generate signature
signature = rsa.sign(random_text, privkey, 'MD5')
print signature
#Verify token
try:
rsa.verify(random_text, signature, pubkey)
except:
print "Verification failed"
Il mio script python fallisce quando si cerca di caricare la chiave pubblica:
ValueError: No PEM start marker "-----BEGIN RSA PUBLIC KEY-----" found
Credo che il problema è il formato della chiave pubblica. Se si guarda da vicino, l'intestazione sulla chiave pubblica generata da openssl è "----- BEGIN PUBLIC KEY -----". Il formato è X509 SubjectPublicKeyInfo. Il metodo che stai utilizzando sta cercando il formato PKCS1 con un'intestazione di "----- BEGIN RSA PUBLIC KEY -----". – gtrig
Ci diresti come convertire X509 in forkt PKCS1? – fengxing