我想使用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中进行比较。
答案 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()
它给了我错误的答案。