Должен ли Android KeyHash зависеть только от ПК, генерирующего его, а не от методов или телефонов?

У меня возникла проблема с созданием Android KeyHash с помощью debug.keystore, которую я не совсем понимаю.

Я понимаю, что если я создаю KeyHash на своем ПК, независимо от того, как я его генерирую, он должен дать мне уникальный keyhash. И я могу принести этот keyhash для интеграции с Facebook SDK.

Однако я выяснил следующее:

  1. Я использую следующую командную строку, предложенную на странице разработчика Facebook:

keytool -exportcert -alias androiddebugkey -keystore% HOMEPATH% .android \ debug.keystore | openssl sha1 -binary | openssl base64 с паролем: android

И я получил следующий keyHash: E3P3dslAkuReIuFQJC5oTlhkRrs =

  1. Затем я использую следующий метод, который нашел в StackOverflow:

Чтобы сгенерировать ключевой хеш, вам нужно выполнить несколько простых шагов.

1) Загрузите Openssl отсюда.

2) Сделайте папку openssl на диске C

3) Распакуйте Zip-файлы в эту папку openssl, созданную на диске C.

4) Скопируйте файл debug.keystore из папки .android в моем случае (C: \ Users \ SYSTEM.android) и вставьте в папку bin JDK в моем случае (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin)

5) Откройте командную строку и укажите путь к папке JDK Bin в моем случае (C: \ Program Files \ Java \ jdk1.6.0_05 \ bin).

6) Скопируйте следующий код и нажмите Enter.

keytool -exportcert -alias androiddebugkey -keystore debug.keystore> c: \ openssl \ bin \ debug.txt

7) Теперь вам нужно ввести пароль, Password = android.

8) Если вы видите в папке openssl Bin, вы получите файл с именем debug.txt

9) Теперь вы можете либо перезапустить командную строку, либо работать с существующей командной строкой.

10) вернитесь на диск C и укажите путь к папке openssl Bin

11) скопируйте следующий код и вставьте

openssl sha1 -binary debug.txt> debug_sha.txt

12) вы получите debug_sha.txt в папке bin openssl

13) Снова скопируйте следующий код и вставьте

openssl base64 -in debug_sha.txt> debug_base64.txt

14) вы получите debug_base64.txt в папке bin openssl

15) откройте файл debug_base64.txt Вот ваш хэш ключа.

с паролем: android

И я получил следующий keyHash: zp + a + 1HT9jLTgob9Htw9EFrZatY =

Оба эти метода создаются на одном компьютере и с одним и тем же хранилищем ключей debug.keystore. Почему они не такие? Разве они не должны быть одинаковыми?

Еще одна проблема - KeyHash, который я получил с помощью кода Android на разных телефонах. Я использую следующий код (снова найденный в StackOverflow):

public static void showHashKey(Context context) {  
    try {
        PackageInfo info = context.getPackageManager().getPackageInfo(
                "com.example.loginfb", PackageManager.GET_SIGNATURES); //Your package name here
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.i("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {
    } catch (NoSuchAlgorithmException e) { 
    }
}

Затем я проверил окно журнала с двумя разными телефонами и обнаружил следующее:

Телефон LG Android 2.3 12-09 09: 22: 51.832: I / KeyHash: (20572): NlsbfhmR2 / ZCXnpKNNsH + 0II8LM =

Телефон Samsung Android 4.2.2 12-09 09: 51: 21.054: I / KeyHash: (20067): zp + a + 1HT9jLTgob9Htw9EFrZatY =

Они дали мне разные HashKey. Однако один из них (zp + a + 1HT9jLTgob9Htw9EFrZatY =) совместим со вторым методом, описанным выше.

Кто-нибудь знает, что здесь происходит? Я действительно несколько раз сбит с толку.

Спасибо за любой ответ.


person Driedshrimp    schedule 09.12.2014    source источник


Ответы (1)


Хэш ключа - это ключ, используемый для подписи APK.

Для сеансов отладки используется ключ отладки по умолчанию.

Обычно, когда вы публикуете свое приложение, вы используете другой ключ. Поэтому ключевой хеш отличается.

person Patrick Chan    schedule 09.12.2014
comment
На данный момент я не получил KeyHash с хранилищем ключей выпуска. Я работал только с debug.keystore во время разработки своего приложения. - person Driedshrimp; 09.12.2014
comment
Просто для интеграции с Facebook SDK программный метод (showKeyHash) более точен. - person Patrick Chan; 09.12.2014
comment
Они должны быть одинаковыми, очень вероятно, что хранилище ключей, к которому вы получаете доступ с помощью команды, не совпадает с хранилищем ключей, которое вы использовали для экспорта APK. - person Patrick Chan; 09.12.2014
comment
Я уверен, что хранилище ключей такое же. Я дважды проверил несколько раз. - person Driedshrimp; 09.12.2014