python - 如何以编程方式计算 Chrome 扩展 ID?

标签 python google-chrome google-chrome-extension sha256

我正在构建一个自动化流程来生成扩展。有没有直接计算extension-ID并且完全绕过与浏览器交互的代码示例?

(我在下面回答我自己的问题。)

最佳答案

我只能找到一篇带有 Ruby 片段的相关文章,而且它只在 IA 中可用:http://web.archive.org/web/20120606044635/http://supercollider.dk/2010/01/calculating-chrome-extension-id-from-your-private-key-233

重要须知:

  1. 这取决于 DER 编码的公钥(原始二进制文件),而不是 PEM 编码的 key (通过对 DER key 进行 base64 编码生成的良好 ASCII)。
  2. 扩展 ID 以 16 为基数,但使用 [a-p](称为“mpdecimal”)而不是 [0-9a-f] 进行编码。

使用 PEM 编码的公钥,按照以下步骤操作:

  1. 如果您的 PEM 格式的公钥仍然有页眉和页脚并且被分成多行,请手动重新格式化它,这样您就有一个排除页眉和页脚的字符串,并且一起运行,这样每个键换行到下一行。
  2. 对公钥进行 Base64 解码以呈现 DER 格式的公钥。
  3. 生成 DER 格式 key 的 SHA256 十六进制摘要。
  4. 获取散列的前 32 个字节。你不需要休息。
  5. 对于每个字符,将其转换为 base-10,并添加 'a' 的 ASCII 码。

以下是执行此操作的 Python 例程:

import hashlib
from base64 import b64decode

def build_id(pub_key_pem):
    pub_key_der = b64decode(pub_key_pem)
    sha = hashlib.sha256(pub_key_der).hexdigest()
    prefix = sha[:32]

    reencoded = ""
    ord_a = ord('a')
    for old_char in prefix:
        code = int(old_char, 16)
        new_char = chr(ord_a + code)

        reencoded += new_char

    return reencoded

def main():
    pub_key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjvF5pjuK8gRaw/2LoRYi37QqRd48B/FeO9yFtT6ueY84z/u0NrJ/xbPFc9OCGBi8RKIblVvcbY0ySGqdmp0QsUr/oXN0b06GL4iB8rMhlO082HhMzrClV8OKRJ+eJNhNBl8viwmtJs3MN0x9ljA4HQLaAPBA9a14IUKLjP0pWuwIDAQAB'

    id_ = build_id(pub_key)
    print(id_)

if __name__ == '__main__':
    main()

非常欢迎您针对现有扩展及其 ID 进行测试。要检索其 PEM 格式的公钥:

  1. 进入 Chrome 中现有扩展程序的列表。获取其中一个的扩展 ID。
  2. 找到托管扩展的目录。在我的 Windows 7 盒子上,它是:C:\Users\AppData\Local\Google\Chrome\User Data\Default\Extensions
  3. 从“ key ”下的 manifest.json 文件中获取公钥。由于 key 已准备好进行 base64 解码,因此您可以跳过该过程的步骤 (1)。

示例中的公钥来自“Chrome 阅读器”扩展。它的扩展 ID 是“lojpenhmoajbiciapkjkiekmobleogjc”。

另见:

  1. Google Chrome - Alphanumeric hashes to identify extensions
  2. http://blog.roomanna.com/12-14-2010/getting-an-extensions-id

关于python - 如何以编程方式计算 Chrome 扩展 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16993486/

相关文章:

python - 如何将数组中 x 处的值与 x +1 处的值进行比较?

javascript - 为什么 javascript 不能替换 Chrome 或 IE 中的全局标志,我该如何解决?

javascript - Chrome Gmail 扩展程序在某些情况下不起作用。为什么?

javascript - 如何获取/设置扩展程序中图像的全局 Google Chrome 内容设置?

javascript - Chrome扩展程序JSON值解析问题

python - 使用plotnine绘制二维密度图(stat_密度_2d)

python - 如何反转字典或列表中的值?

python - 模糊图像服务器端或使用 CSS

ruby-on-rails - net::ERR_INCOMPLETE_CHUNKED_ENCODING仅在Chrome中

javascript - 如何防止在 chrome 和 safari 中从 "empty"位置双击选择