在python中打印.pem键DER表单

时间:2014-02-11 18:14:39

标签: python rsa private-key pycrypto m2crypto

我想使用python打印出.pem键的二进制表单(不确定我是否会引用它)。为了澄清,我想在python中做这个unix命令打印出来的内容:

cat privateKey.pem | openssl rsa -pubout -outform DER

我不能只使用子进程调用此命令,因为我希望它在Windows上运行。我查看了M2Crypto和PyCrypto库,使用M2Crypto库我可以使用

加载密钥
from M2Crypto import RSA
rsaKey = RSA.load_key('privateKey.pem')

但我没有看到任何rsaKey方法打印出二进制形式。

编辑:

这是我到目前为止所拥有的:

import M2Crypto
key = M2Crypto.RSA.load_key('key.pem')
bio = M2Crypto.BIO.MemoryBuffer()

key.save_key_der_bio(bio)

der = bio.read()

der与openssl打印出来的不一样。我将openssl的输出传输到hexdump中进行比较。

2 个答案:

答案 0 :(得分:4)

我会这样做:

from Crypto.PublicKey import RSA

key = RSA.importKey(open("privatekey.pem").read())
der = key.publickey().exportKey("DER")

答案 1 :(得分:1)

我明白了。所以unix命令

cat privateKey.pem | openssl rsa -pubout -outform DER

实际上是打印出公钥的DER形式。 以下是我必须要做的事情,使用M2Crypto库:

import M2Crypto
privatekey = M2Crypto.RSA.load_key('privatekey.pem')

bio = M2Crypto.BIO.MemoryBuffer()
privatekey.save_pub_key_bio(bio)

pubkey = bio.read()
pubkey = ''.join(pubkey.split('\n')[1:-2]) # remove -----BEGIN PUB KEY... lines and concatenate
der = base64.b64decode(pubkey)

这是我想要的形式。出于某种原因,如果我做了

pubkey = M2Crypto.RSA.load_pub_key_bio(bio)
pubkey.save_key_der_bio(bio)
der = bio.read()

它给了我错误的答案。