使用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方法。
发布于 2011-05-11 05:59:17
目前还不清楚您这样做的目的是什么,但是如果您想要的只是一个与openssl兼容的DSA私钥,那么您应该只需遵循openssl 每日生活津贴(1)手册页。
带有私钥的DER选项使用由版本(当前为零)、p、q、g的值组成的ASN .1序列的.1 DER编码形式,公钥和私钥组件分别作为ASN .1整数。
这是如何以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 == key2https://stackoverflow.com/questions/5938664
复制相似问题