当前位置: 首页 > 面试题库 >

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

康秋月
2023-03-14
问题内容

我正在建立一个自动化的过程来产生扩展。是否存在直接计算扩展名ID并完全绕过与浏览器交互的代码示例?

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


问题答案:

我只能找到有关Ruby片段的相关文章,并且仅在IA中可用:http
://web.archive.org/web/20120606044635/http:
//supercollider.dk/2010/01/calculating-
chrome扩展名来自您的私钥233


重要提示:

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

使用PEM编码的公钥,请执行以下步骤:

  1. 如果您的PEM格式的公钥仍然具有页眉和页脚并且被分成多行,请手动对其进行重新格式化,以使您拥有一个不包含页眉和页脚的单个字符串,并一起运行,以便密钥换行到下一个。
  2. Base64解码公钥以呈现DER格式的公钥。
  3. 生成DER格式密钥的SHA256十六进制摘要。
  4. 取哈希的前32个字节。您将不需要其余的。
  5. 对于每个字符,将其转换为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文件中获取公共密钥。由于密钥已经准备好进行base64解码,因此可以跳过该过程的步骤(1)。

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

也可以看看:

  1. Google Chrome-字母数字哈希标识扩展名
  2. http://blog.roomanna.com/12-14-2010/getting-an-extenshtml" target="_blank">ions-id


 类似资料: