繁体   English   中英

如何将公共 RSA 密钥从文件加载到 Python-RSA 中?

[英]How to load a public RSA key into Python-RSA from a file?

我使用 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

如果在 Python3 上,您还需要以二进制模式打开密钥,例如:

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

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

要使用 python-rsa 库加载 OpenSSL 生成的公钥文件,请尝试

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)

您可以通过 ssh-keygen 生成私钥:

ssh-keygen -t rsa

并生成这样的公钥:

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

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

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend


def load_keys():
    with open("public.pem", "rb") as f:
        public = serialization.load_pem_public_key(
            f.read(), backend=default_backend()
        )
    with open("private.pem", "rb") as f:
        private = serialization.load_pem_private_key(
            f.read(), None, backend=default_backend()
        )
    return private, public

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM