【发布时间】:2011-02-01 02:30:11
【问题描述】:
我最近一直试图弄清楚如何让 PyCrypto 识别由 Google Chrome 打包过程产生的 PEM。问题是标准的 importKey 方法会导致错误。经过相当长的过程,我终于意识到我可以通过对 DerSequence.decode 方法进行逆向工程来初步模拟导入(所有细节here)。不幸的是,它给我留下了一个未解决的问题。
我可以拿到导入的key,看起来还算一致,但是我还剩下40个字符。
import binascii
# read the pem file into chromepem
# the first and last lines are useless,
# we need it to be a string, not a tuple
# and it needs to be one string with no newlines.
chromepem = ''.join(open("chrome.pem","r").readlines()[1:-1]).replace("\n","")
# not sure why, but it looks like the first 40 characters aren't necessary.
# removing them seems to create a consistent public key anyway...
pem = binascii.a2b_base64(chromepem[40:])
有谁知道为什么会有这 40 个字符?忽略它们会导致某些私钥/公钥对出现问题吗?
【问题讨论】:
-
你试过简单地使用
RSA.ImportKey()吗?您应该需要对第一行和最后一行做任何事情,只需阅读整个内容并将其提供给 ImportKey。 -
我做到了。它告诉我密钥格式不正确。相信我,如果我能够做到这一点,我会为自己节省 20 个小时的挫败感。
-
哈,我相信你,但我不得不问。一个问题是 PEM 本身并不是一种真正的特定格式,而是一种通用格式,它采用二进制 blob,base64 对其进行编码,并用 BEGIN 和 END 行包围它。可能 ImportKey 期望一种二进制 blob,而您的 PEM 文件是另一种。在这种情况下,共有三种常见的私钥格式,PKCS8、PKCS12 和 openssl 专有。也许今天晚些时候我会玩弄谷歌浏览器软件,看看我能不能弄清楚它是什么,以及 PyCrypto RSA 正在寻找哪个。
标签: python google-chrome-extension rsa pem pycrypto