Frage

Google Chrome wird mit alphanumerischen Hashes als Bezeichner für die Chrome-Erweiterungen. Für zB. "Ajpgkpeckebdhofmmjfgcjjiiejpodla" ist die Kennung für XMarks Bookmark Sync-Erweiterung.

Welcher Algorithmus ist hier im Einsatz solcher Strings zu generieren? Wie geht es sicherzustellen, dass sie Einzigartigkeit?

War es hilfreich?

Lösung

Chrom erzeugt die ID mit den öffentlichen Schlüssel. Wenn Sie die Erweiterung Galerie verwenden, sie handhaben, dass alles für Sie.

Von der Quelle :

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;
}

Hier finden Sie aktuelle extension.cc Datei es detailliertere Informationen hat wie die .pem-Datei exncoding / Decodierung zu erzeugen, etc.

Andere Tipps

Um genau zu sein, dann ist es die ersten 128 Bits des SHA256 eines öffentlichen RSA-Schlüssel in der Basis codiert 16.

Ein weiterer Zufall bisschen Trivia ist, dass die Codierung verwendet ein-p anstelle von 0-9a-f. Der Grund dafür ist, dass führende numerische Zeichen in dem Host-Feld eines Ursprungs aufwickeln kann als potentielle IP-Adressen von Chrome behandelt werden. Wir beziehen uns auf sie intern als „mpdecimal“ nach dem Mann, der mit ihm kam.

Hier ist ein Linux-Motto:

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

schön formatiert, um die Lesbarkeit

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

Ich habe einen kurzen Ruby-Skript geschrieben, die Erweiterung id aus dem privaten Schlüssel zu berechnen: http://supercollider.dk/2010/01/calculating-chrome-extension-id-from-your-private-key-233 . Dieser ziemlich folgt Erik Kay Beschreibung des Formats.

Ein netter kleinen Bash-Skript für eine „idiotensicher“ Art und Weise Ihrer Erweiterungen ID herauszufinden. Dank A-Tuin für den oneliner Befehl.

#!/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

Ich habe crx_appid gem leicht zu berechnen appid.

https://rubygems.org/gems/crx_appid

$ gem install crx_appid
$ crx_appid extension.pem

zu sein, noch präziser, die Eingabe in dem SHA256 Hash ist der X.509 SubjectPublicKeyInfo Block, DER-kodiert. Dies ist das fünfte Feld in den CRX-Header wie in rel="nofollow">. Es ist auch die Byte-Reihenfolge erhalten Sie, wenn Sie den Wert von „Schlüsseln“ im Manifest und Base64-Dekodierungs es nehmen.

Dies ist die einfache Möglichkeit, in bash (und OpenSSL) den X.509 SubjectPublicKeyInfo Block zu bekommen, DER-codierte:

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

Wo $pem ist die private Schlüsseldatei, RSA verschlüsselt.

Um die SHA256 Digest zu erhalten benötigen Sie die folgenden auf die Datei aus der vorherigen Zeile resultierende auszuführen:

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

Alles, was bleibt, ist die resultierende 32 Zeichen Zeichenfolge zu nehmen und sie von regelmäßigen Sechseck ändern ( [0-9] [af]) auf ([ap] ), wo a Spiele 0 und p Streichhölzer f.

Mit einem wenig Mühe, ich bin ziemlich sicher, dass diese beiden Schritte in einen Einzeiler gemacht werden könnten. Ich hoffe, Sie finden es hilfreich, und wenn ja, lass es mich wissen.

scroll top