2013-05-10 34 views
8

tôi tạo ra một riêng và khóa công khai với các lệnh sau:Cách tải bằng Python-RSA một khóa RSA công khai từ một tệp được tạo bằng openssl?

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

sau đó tôi đã cố gắng để tải chúng với một kịch bản python sử dụng 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" 

script python của tôi thất bại khi nó cố gắng tải khóa công khai:

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

Tôi nghĩ vấn đề là định dạng của khóa công khai. Nếu bạn nhìn kỹ, tiêu đề trên khóa công khai được tạo ra mở ra là "----- BEGIN KHÓA CHÍNH -----". Định dạng là X509 SubjectPublicKeyInfo. Phương pháp bạn đang sử dụng đang tìm kiếm định dạng PKCS1 với tiêu đề "----- BEGIN RSA PUBLIC KEY -----". – gtrig

+0

Bạn có thể cho chúng tôi biết cách chuyển đổi X509 thành PKCS1 không? – fengxing

Trả lời

3

Python-RSA sử dụng định dạng PEM RSAPublicKey và định dạng PEM RSAPublicKey sử dụng dòng tiêu đề và chân trang: openssl NOTES

----- BEGIN RSA CÔNG CHÍNH ----- ----- END RSA CÔNG CHÍNH -----

Output phần nào của một khóa bí mật ở định dạng RSAPublicKey : VÍ DỤ openssl

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

Nếu trên Python3, Bạn cũng cần phải mở khóa trong chế độ nhị phân, ví dụ:

with open('private_key.pem', 'rb') as privatefile: 
Các vấn đề liên quan