2013-05-10 166 views
8

我產生了私人和使用以下命令公鑰:如何使用openssl生成的文件在Python-RSA中加載公共RSA密鑰?

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

然後我試着使用Python的RSA python腳本來加載它們:

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" 

我的Python腳本失敗時,它試圖加載公鑰:

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

我認爲這個問題是公鑰的格式。如果仔細觀察,openssl生成的公鑰的標題是「----- BEGIN PUBLIC KEY -----」。格式是X509 SubjectPublicKeyInfo。您正在使用的方法是尋找帶有「----- BEGIN RSA PUBLIC KEY -----」標頭的PKCS1格式。 – gtrig 2013-06-19 21:04:37

+0

你會告訴我們如何將X509轉換爲PKCS1有限? – fengxing 2013-08-22 06:42:29

回答

3

Python的RSA使用PEM RSAPublicKey格式和PEM RSAPublicKey格式使用頁眉和頁腳行: openssl NOTES

----- BEGIN RSA公鑰----- ----- END RSA公鑰-----

產出RSAPublicKey格式的私有密鑰的公共部分: OpenSSL的實例

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

如果Python3,你還需要在二進制模式開關鍵,例如:

with open('private_key.pem', 'rb') as privatefile: 
相關問題