2013-05-10 8 views
8

I generowane prywatny i klucz publiczny z następującymi poleceniami:Jak załadować w Pythonie RSA publiczny klucz RSA z pliku wygenerowanego przy pomocy openssl?

openssl genrsa -out private_key.pem 512 
openssl rsa -in private_key.pem -pubout -out public_key.pem 

Potem próbowali załadować je ze skryptu Pythona przy użyciu Pythona 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" 

Mój skrypt python nie kiedy go próbuje załadować klucza publicznego:

ValueError: No PEM start marker "-----BEGIN RSA PUBLIC KEY-----" found 
+1

Myślę, że problemem jest format klucza publicznego. Jeśli przyjrzysz się uważnie, nagłówek generowanego klucza publicznego openssl brzmi "----- BEGIN PUBLIC KEY -----". Format to X509 SubjectPublicKeyInfo. Metoda, której używasz, szuka formatu PKCS1 z nagłówkiem "----- BEGIN RSA PUBLIC KEY -----". – gtrig

+0

Powiedz nam, jak przekonwertować X509 na foramt PKCS1? – fengxing

Odpowiedz

3

Python-RSA używa formatu PEM RSAPublicKey i format PEM RSAPublicKey używa nagłówka i stopki linie: openssl NOTES

----- BEGIN RSA PUBLIC KEY ----- ----- END RSA PUBLIC KEY -----

wyjściowa część publicznego klucza prywatnego w formacie RSAPublicKey : openssl PRZYKŁADY

openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem 
3

Jeśli na Python3, trzeba także otworzyć klucza w trybie binarnym, np:

with open('private_key.pem', 'rb') as privatefile: 
Powiązane problemy