我正在构建一个自动化流程来生成扩展。有没有直接计算extension-ID并且完全绕过与浏览器交互的代码示例?
(我在下面回答我自己的问题。)
最佳答案
我只能找到一篇带有 Ruby 片段的相关文章,而且它只在 IA 中可用:http://web.archive.org/web/20120606044635/http://supercollider.dk/2010/01/calculating-chrome-extension-id-from-your-private-key-233
重要须知:
- 这取决于 DER 编码的公钥(原始二进制文件),而不是 PEM 编码的 key (通过对 DER key 进行 base64 编码生成的良好 ASCII)。
- 扩展 ID 以 16 为基数,但使用 [a-p](称为“mpdecimal”)而不是 [0-9a-f] 进行编码。
使用 PEM 编码的公钥,按照以下步骤操作:
- 如果您的 PEM 格式的公钥仍然有页眉和页脚并且被分成多行,请手动重新格式化它,这样您就有一个排除页眉和页脚的字符串,并且一起运行,这样每个键换行到下一行。
- 对公钥进行 Base64 解码以呈现 DER 格式的公钥。
- 生成 DER 格式 key 的 SHA256 十六进制摘要。
- 获取散列的前 32 个字节。你不需要休息。
- 对于每个字符,将其转换为 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 格式的公钥:
- 进入 Chrome 中现有扩展程序的列表。获取其中一个的扩展 ID。
- 找到托管扩展的目录。在我的 Windows 7 盒子上,它是:C:\Users
\AppData\Local\Google\Chrome\User Data\Default\Extensions - 从“ key ”下的 manifest.json 文件中获取公钥。由于 key 已准备好进行 base64 解码,因此您可以跳过该过程的步骤 (1)。
示例中的公钥来自“Chrome 阅读器”扩展。它的扩展 ID 是“lojpenhmoajbiciapkjkiekmobleogjc”。
另见:
关于python - 如何以编程方式计算 Chrome 扩展 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16993486/