19

Google Chrome は、Chrome 拡張機能の識別子として英数字のハッシュを使用しています。たとえば。「ajpgkpeckebdhofmmjfgcjjiiejpodla」は、XMarks Bookmark Sync 拡張機能の識別子です。

このような文字列を生成するために、ここではどのアルゴリズムが使用されていますか? 彼らはどのようにして一意性を確保していますか?

4

8 に答える 8

32

正確には、base 16 でエンコードされた RSA 公開鍵の SHA256 の最初の 128 ビットです。

もう 1 つのランダムなトリビアは、エンコーディングが 0-9a-f の代わりに ap を使用することです。その理由は、オリジンのホスト フィールドの先頭の数字が、Chrome によって潜在的な IP アドレスとして扱われてしまう可能性があるためです。内部では、それを思いついた人にちなんで「mpdecimal」と呼んでいます。

于 2010-01-12T17:24:25.590 に答える
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;
}

extension.cc ファイルを見てください。.pem ファイルの exncoding/decoding の生成など、より詳細な情報が含まれています。

于 2009-12-25T22:10:07.177 に答える
16

Linux のワンライナーは次のとおりです。

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

読みやすいようにきれいにフォーマットされています

cat FILE.PEM | \
openssl rsa -pubout -outform DER | \
openssl dgst -sha256 | \
awk '{print $2}' | \
cut -c 1-32 | \
tr '0-9a-f' 'a-p'
于 2012-04-10T13:29:53.070 に答える
8

秘密鍵から拡張機能IDを計算するための短いRubyスクリプトを投稿しました:http ://supercollider.dk/2010/01/calculating-chrome-extension-id-from-your-private-key-233 。これは、ErikKayによるフォーマットの説明にほぼ従っています。

于 2010-01-18T22:39:45.863 に答える
2

拡張機能の ID を見つけるための「馬鹿げた証明」方法のための素敵な小さな bash スクリプト。oneliner コマンドを提供してくれた A-Tuin に感謝します。

#!/bin/bash
txtred=$(tput setaf 1) # Red

echo "Script to generate extension id from your extensions .pem file"
sleep 2
while true; do
read -e -p "Enter local file path for your pem file " PEMFILE
if [[ $PEMFILE != *.pem ]]; then
        echo "That is not a .pem file. Please enter a correct .pem file"
        sleep 2
else
        break
fi
done
PEMFILEGEN=`cat $PEMFILE | openssl rsa -pubout -outform DER | openssl dgst -sha256 | awk '{print $2}' | cut -c 1-32 | tr '0-9a-f' 'a-p'`
echo "Your extension id is:${txtred} $PEMFILEGEN${textred}"
tput sgr0
exit 0
于 2014-10-30T09:08:54.117 に答える
1

appid を簡単に計算できるようにcrx_appid gem を作りました。

https://rubygems.org/gems/crx_appid

$ gem install crx_appid
$ crx_appid extension.pem
于 2013-04-16T07:28:05.167 に答える
0

さらに正確に言うと、SHA256 ハッシュへの入力は、DER エンコードされた X.509 SubjectPublicKeyInfo ブロックです。CRX Package Formatで説明されているように、これは crx ヘッダーの 5 番目のフィールドです。これは、マニフェストの "key" の値を取得して base-64 でデコードした場合に得られるバイト シーケンスでもあります。

于 2011-07-18T20:54:58.913 に答える
0

DER でエンコードされた X.509 SubjectPublicKeyInfo ブロックを取得するための bash (および openssl) の簡単な方法を次に示します。

openssl rsa -pubout -outform DER < "$pem" > "$pub" 2>/dev/null

$pemRSA でエンコードされた秘密鍵ファイルはどこにありますか。

SHA256 ダイジェストを取得するには、前の行の結果のファイルに対して次を実行する必要があります。

openssl dgst -sha256 $pub | awk '{print $2}' | cut -c 0-32

あとは、結果の 32 文字の文字列を取得して、通常の 16 進数 ( [0-9][ af ]) から ([ap]a )に0変更するだけです。pf

少し努力すれば、これらの 2 つのステップをワンライナーにできると確信しています。お役に立てば幸いです。もしそうなら、お知らせください。

于 2011-12-28T16:21:54.757 に答える