【问题标题】:Printing .pem key DER form in python在 python 中打印 .pem 密钥 DER 表单
【发布时间】:2014-02-11 18:14:38
【问题描述】:

我想使用 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 以进行比较。

【问题讨论】:

  • 您的密钥加密了吗? (您可以通过在文本编辑器中打开文件来检查)
  • 不是。它看起来像 -----BEGIN PRIVATE KEY----SOME BASE 64 ENCODED TEXT-----END PRIVATE KEY-----
  • 你试过save_key_der吗?
  • 是的,这与 save_key_der_bio 的作用相同,但作用于文件。该文件的内容与我保存到简历并阅读该简历时的内容相同。

标签: python rsa private-key pycrypto m2crypto


【解决方案1】:

我会这样做:

from Crypto.PublicKey import RSA

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

【讨论】:

  • 哇,比我的回答简单多了。谢谢!
【解决方案2】:

我想通了。所以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()

它给了我错误的答案。

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 2019-08-26
    • 1970-01-01
    • 2018-04-16
    • 2014-02-06
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多