【问题标题】:Why are there forty characters left over in Google's PEM for packing a Chrome extension为什么 Google 的 PEM 中剩下 40 个字符用于打包 Chrome 扩展
【发布时间】:2011-02-01 02:30:11
【问题描述】:

我最近一直试图弄清楚如何让 PyC​​rypto 识别由 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


【解决方案1】:

目前,最简单的做法是使用 openssl rsa 实用程序将 chrome.pem 文件转换为 chrome.der 文件。类似的东西

openssl rsa -in chrome.pem -out chrome.der -outform DER

应该可以解决问题。现在您可以直接在 RSA.importKey() 方法中使用来自 chrome.der 的字节。

【讨论】:

  • 这实际上就是 bash 脚本的作用(并且它始终如一地工作)。我希望有一个纯 Python 实现。
  • 完全合理,我可能还想办法。 pycrypto 的东西在文档上看起来有点粗略,API 在我看来相当不完整。
  • (文档非常粗略......)
猜你喜欢
  • 2013-10-13
  • 1970-01-01
  • 2019-11-10
  • 2013-05-31
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多