如何生成RSA/DSA公钥的PEM序列化

2024-05-14 08:59:37 发布

您现在位置:Python中文网/ 问答频道 /正文

使用PyCrypto,我能够为RSA密钥生成公共和私有PEM序列化,但是在PyCrypto中,DSA类没有exportKey()方法。在

尝试PyOpenSSL我能够为RSA和DSA密钥生成私有PEM序列化,但是没有crypto.dump_公钥方法。在

我正在寻找如何为RSA和DSA密钥生成PEM序列化的建议。在

非常感谢!在

PS:同时,我更改了PyOpenSSL代码,也为cryptoapi导出了dump_privatekey方法。PyOpenSSL错误和补丁可以在:https://bugs.launchpad.net/pyopenssl/+bug/780089


我已经在用了扭曲的海螺因此,我通过使用PyCrypto手动生成DSA/RSA密钥,然后初始化扭曲的.conch.ssh.钥匙。钥匙用这个钥匙。Conch中的Key类为字符串序列化提供了一个toString方法。在


Tags: 方法序列化密钥cryptodumppemrsa建议
1条回答
网友
1楼 · 发布于 2024-05-14 08:59:37

目前还不清楚您这样做是为了什么,但是如果您只想要一个与openssl兼容的DSA私钥,那么您只需遵循openssldsa(1) manual page

The DER option with a private key uses an ASN1 DER encoded form of an ASN .1 SEQUENCE consisting of the values of version (currently zero), p, q, g, the public and private key components respectively as ASN .1 INTEGERs.

以下是如何以openssl格式导出/导入DSA私钥的示例:

from Crypto.PublicKey import DSA
from Crypto.Util import asn1

key = DSA.generate(1024)

# export

seq = asn1.DerSequence()
seq[:] = [ 0, key.p, key.q, key.g, key.y, key.x ]

exported_key = "  -BEGIN DSA PRIVATE KEY  -\n%s  -END DSA PRIVATE KEY  -" % seq.encode().encode("base64")

print exported_key

# import

seq2 = asn1.DerSequence()
data = "\n".join(exported_key.strip().split("\n")[1:-1]).decode("base64")
seq2.decode(data)
p, q, g, y, x = seq2[1:]

key2 = DSA.construct((y, g, p, q, x))

assert key == key2

相关问题 更多 >

    热门问题