可能重复:
Google Chrome - Alphanumeric hashes to identify extensions
我正在构建Chrome extension packager,并且正在尝试弄清楚如何以编程方式从包内容生成appID。
appID是一个32字节的字符串,由小写字母组成,如下所示:
根据Chrome extension documentation,appID是“根据扩展程序的公钥的哈希生成的”,用于唯一标识扩展名。
由于我希望能够在不使用Chrome GUI的情况下打包扩展程序,并且公钥已包含在打包内容中,有人可以告诉我这些是如何生成的吗?
答案 0 :(得分:5)
以特殊方式编码为字符串的公钥的SHA256:
答案 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