Google Chrome - 用于识别扩展名的字母数字哈希值

Vij*_*Dev 19 google-chrome-extension

Google Chrome使用字母数字哈希作为Chrome扩展程序的标识符.例如."ajpgkpeckebdhofmmjfgcjjiiejpodla"是XMarks Bookmark Sync扩展的标识符.

这里使用哪种算法来生成这样的字符串?他们如何确保独特性?

小智 32

确切地说,它是在基数16中编码的RSA公钥的SHA256的前128位.

另一个随机的琐事是编码使用ap而不是0-9a-f.原因是源的主机字段中的前导数字字符最终会被Chrome视为潜在的IP地址.在提出它之后,我们在内部将其称为"mpdecimal".

  • beriberikix:是的,`chrome.i18n.getMessage(“@@extension_id”)` (2认同)
  • `chrome.runtime.id`现在是访问扩展ID的首选方式. (2认同)

Moh*_*our 17

Chromium通过公钥生成id.如果您使用扩展程序库,他们会为您处理所有这些.

来源:

bool Extension::GenerateId(const std::string& input, std::string* output) {
  CHECK(output);
  if (input.length() == 0)
    return false;

  const uint8* ubuf = reinterpret_cast<const unsigned char*>(input.data());
  SHA256Context ctx;
  SHA256_Begin(&ctx);
  SHA256_Update(&ctx, ubuf, input.length());
  uint8 hash[Extension::kIdSize];
  SHA256_End(&ctx, hash, NULL, sizeof(hash));
  *output = StringToLowerASCII(HexEncode(hash, sizeof(hash)));
  ConvertHexadecimalToIDAlphabet(output);

  return true;
}
Run Code Online (Sandbox Code Playgroud)

看一下extension.cc文件,它有更详细的信息,比如生成.pem文件exncoding/decoding等.


小智 15

这是一个linux one liner:

cat FILE.PEM | openssl rsa -pubout -outform DER | openssl dgst -sha256 | awk '{print $2}' | cut -c 1-32 | tr '0-9a-f' 'a-p'
Run Code Online (Sandbox Code Playgroud)

格式良好,易于阅读

cat FILE.PEM | \
openssl rsa -pubout -outform DER | \
openssl dgst -sha256 | \
awk '{print $2}' | \
cut -c 1-32 | \
tr '0-9a-f' 'a-p'
Run Code Online (Sandbox Code Playgroud)


Mar*_*ben 8

我发布了一个简短的Ruby脚本来从私钥计算扩展ID:http://supercollider.dk/2010/01/calculating-chrome-extension-id-from-your-private-key-233.这几乎遵循了Erik Kay对格式的描述.