首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为公共RSA/DSA密钥生成PEM序列化

如何为公共RSA/DSA密钥生成PEM序列化
EN

Stack Overflow用户
提问于 2011-05-09 14:56:30
回答 1查看 4.2K关注 0票数 6

使用PyCrypto I可以为PyCrypto密钥生成公共和私有的PEM序列化,但是在PyCrypto中,DSA类没有exportKey()方法。

尝试PyOpenSSL I可以为RSA和DSA密钥生成私有的PEM序列化,但是PyOpenSSL中没有crypto.dump_publickey方法。

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

非常感谢!

PS:同时,我已经更改了PyOpenSSL代码,以导出用于加密API的dump_privatekey方法。PyOpenSSL bug和修补程序可以在:https://bugs.launchpad.net/pyopenssl/+bug/780089上找到

我已经在使用Twisted.conch,所以我解决了这个问题,方法是使用PyCrypto手动生成DSA/RSA密钥,然后使用该密钥初始化twisted.conch.ssh.key.Key。Conch中的Key类为字符串序列化提供了一个toString方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-11 05:59:17

目前还不清楚您这样做的目的是什么,但是如果您想要的只是一个与openssl兼容的DSA私钥,那么您应该只需遵循openssl 每日生活津贴(1)手册页

带有私钥的DER选项使用由版本(当前为零)、p、q、g的值组成的ASN .1序列的.1 DER编码形式,公钥和私钥组件分别作为ASN .1整数。

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

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5938664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档