How to generate the appID for a Google Chrome Extension [duplicate]

坚强是说给别人听的谎言 提交于 2021-02-07 08:32:18

问题


Possible Duplicate:
Google Chrome - Alphanumeric hashes to identify extensions

I'm building a Chrome extension packager, and am trying to figure out how to programmatically generate the appID from the package contents.

The appID is a 32-byte string consisting of lower-case letters, like these:

extension page screenshot

According to the Chrome extension documentation, the appID is "generated based on a hash of the extension's public key," and is used to uniquely identify an extension.

Since I'd like to be able to package an extension without using the Chrome GUI, and the public key is already included in the package contents, can anyone tell me how these are generated?


回答1:


It is SHA256 of the public key encoded into string in a special way:

http://codesearch.google.com/#OAMlx_jo-ck/src/chrome/browser/extensions/extension_service.cc&exact_package=chromium&q=Extension::GenerateId&type=cs&l=1200

http://codesearch.google.com/#OAMlx_jo-ck/src/chrome/common/extensions/extension.cc&exact_package=chromium&q=GenerateId&type=cs&l=375




回答2:


I've got a write up with Ruby example code:

Chrome Extension developer Erik Kay explains the format on Stack Overflow:

To be precise, it’s the first 128 bits of the SHA256 of an RSA public key encoded in base 16. Another random bit of trivia is that the encoding uses a-p instead of 0-9a-f. The reason is that leading numeric characters in the host field of an origin can wind up being treated as potential IP addresses by Chrome. We refer to it internally as “mpdecimal” after the guy who came up with it.

Here’s a short Ruby script to do exactly this:

require "openssl"
require "digest/sha2"

def pkey_to_id(pkey)
  # Key algorithm, found in <http://github.com/Constellation/crxmake>.
  algo = %w(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00).map{ |s| s.hex }.pack("C*")
  # Calculate public key, get hex hash of first 128 bits / 32 characters
  hash = Digest::SHA256.hexdigest(algo + OpenSSL::PKey::RSA.new(pkey).public_key.to_der)[0...32]
  # Shift hex from 0-9a-f to a-p
  hash.unpack("C*").map{ |c| c < 97 ? c + 49 : c + 10 }.pack("C*")
end


来源:https://stackoverflow.com/questions/7702668/how-to-generate-the-appid-for-a-google-chrome-extension

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!