如何为Google Chrome扩展程序生成appID

时间:2011-10-09 09:49:29

标签: google-chrome-extension

  

可能重复:
  Google Chrome - Alphanumeric hashes to identify extensions

我正在构建Chrome extension packager,并且正在尝试弄清楚如何以编程方式从包内容生成appID。

appID是一个32字节的字符串,由小写字母组成,如下所示:

extension page screenshot

根据Chrome extension documentation,appID是“根据扩展程序的公钥的哈希生成的”,用于唯一标识扩展名。

由于我希望能够在不使用Chrome GUI的情况下打包扩展程序,并且公钥已包含在打包内容中,有人可以告诉我这些是如何生成的吗?

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:2)

我有a write up Ruby示例代码:

  

Chrome扩展程序开发人员Erik Kay explains the format在Stack上   溢出:

     
    

准确地说,它是RSA公共的SHA256的前128位     在基数16中编码的密钥。另一个随机的琐事就是     编码使用a-p而不是0-9a-f。原因是领先     原点的主机字段中的数字字符可能会结束     被Chrome视为潜在的IP地址。我们在内部提到它     在提出它的人之后,就像“mpdecimal”一样。

  
     

这是一个简短的Ruby脚本来完成这个:

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