如何从文件加载一个RSA公钥成Python-RSA?

问题描述 投票:9回答:4

我产生了私人和使用OpenSSL使用以下命令公钥:

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
python openssl rsa pem
4个回答
4
投票

Python的RSA使用PEM RSAPublicKey格式和PEM RSAPublicKey格式使用页眉和页脚行:openssl NOTES

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

在输出格式RSAPublicKey私有密钥的公共部分:OpenSSL的实例

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

6
投票

如果Python3,您还需要以二进制方式打开,e.g关键:

with open('private_key.pem', 'rb') as privatefile:

1
投票

要加载OpenSSL的产生与Python-RSA库公共密钥文件,尝试

with open('public_key.pub', mode='rb') as public_file:
    key_data = public_file.read()
    public_key = rsa.PublicKey.load_pkcs1_openssl_pem(key_data)

0
投票

您可以通过生成的ssh-凯基私钥:

ssh-keygen -t rsa

而产生这样的公共密钥:

ssh-keygen -e -m pem -f xxx > pubkey.pem

http://blog.oddbit.com/2011/05/08/converting-openssh-public-keys/

© www.soinside.com 2019 - 2024. All rights reserved.