Facebook Android генерирует хэш ключа


119

Пытаясь создать приложение для Android с интеграцией с Facebook, я добрался до той части документации, где вам нужно сгенерировать ключевой хеш-файл, в нем указано, что нужно запустить следующий код

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore 
| openssl sha1 -binary
| openssl base64

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

Я просто хочу сгенерировать свой хеш-ключ

Может кто-то указать мне верное направление?


2
Вы используете правильный пароль?
Президент Джеймс К. Полк,

При вводе команды в терминал она не дает мне возможности ввести пароль
Скотт,

Попробуйте ввести только команду keytool без последних двух каналов.
Президент Джеймс К. Полк

6
Я понял, я иногда дурак, вводю команду на всю строку, не копируй и не вставляй
Скотт

Ответы:


20

Удалите сертификат отладки в ~ / .android / debug.keystore (в Linux и Mac OS X); каталог выглядит примерно как% USERHOME% /. android в Windows.

Затем плагин Eclipse должен сгенерировать новый сертификат, когда вы в следующий раз попытаетесь создать отладочный пакет.

Дай мне знать, если это работает.


не сработало. удалил файл debug.keystore, сделал отладочную сборку, файл больше не вернулся. отмечая, что еще в этой папке обновлено.
CthulhuJon

3
Я действительно не знаю, как это принятый ответ?
Enoobong

Создайте HashKey для режима отладки и выпуска, используя this. stackoverflow.com/questions/7506392/…
Наим Ибрагим

281

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

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 Вот ваш хэш ключа.


4
хороший ответ +1 для вас, я следил за этим и получил желаемый результат :)
BBdev

Я получаю следующее: ошибка keytool: java.io.IOException: было подделано хранилище ключей или неверный пароль. Как найти правильный пароль?
DuyguK

Это сработало для меня после 2 дней путаницы в том, что происходило. Блестящая работа!
rennoDeniro 02

4
@Vizzz: Хороший способ объяснить генерацию ключевого хэша. Спасибо за этот пост, надеюсь, этот пост сэкономит кому-нибудь уйму времени.
Эмран Хамза

1
Я пробовал каждый код, но так и не получил желаемого результата. Я пробовал код из facebook, это тоже то же самое, только все три команды в одной команде, но запуск трех команд по отдельности дал правильный код и работал, час поиска или, возможно, дни поиска. Спасибо. Раньше только код в приложении для Android давал правильный результат, командная строка давала неверные ключи, теперь все в порядке.
Еще

149

ОБНОВЛЕННЫЙ ОТВЕТ (создание с помощью кода) Более простой способ:

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

Второй вариант - распечатать ключевой хэш, отправленный в Facebook, и использовать это значение. Внесите следующие изменения в метод onCreate () в своем основном действии:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.facebook.samples.loginhowto", 
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
        } catch (NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        ...other operations

}//end of onCreate

Замените com.facebook.samples.loginhowto на свое собственное имя пакета (имя пакета в Manifest.xml).

Официальная ссылка - https://developers.facebook.com/docs/android/login-with-facebook/ (см. Внизу страницы)

СТАРЫЙ ОТВЕТ (создание Keyhash с использованием openssl)

  1. для генерации подписи вам необходимо установить openssl на вашем компьютере. Если у вас нет одного, скачайте openssl отсюда
  2. В C:, Создать opensslпапку
  3. извлеките содержимое загруженного zip-файла openssl в opensslпапку на C:диске
  4. открыть командную строку
  5. перейти к binиз openssl т.е. C:\openssl\binв командной строке
  6. выполните следующую команду, чтобы сгенерировать хэш-код ключа. При генерации хэш-ключа он должен запросить пароль.

    keytool -exportcert -alias androiddebugkey -keystore "C: \ Users \ Anhsirk.android \ debug.keystore" | openssl sha1 -binary | openssl base64

ПРИМЕЧАНИЕ : в приведенном выше коде обратите внимание, что вам необходимо указать свой путь пользователю (т.е. в моем случае это C: \ Users \ Anhsirk, вам просто нужно изменить это для своей учетной записи.

Введите пароль как android

, Если он не запрашивает пароль, ваш путь к хранилищу ключей неверен.

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

введите описание изображения здесь


Я получаю следующее: ошибка keytool: java.io.IOException: было подделано хранилище ключей или неверный пароль. Как найти правильный пароль?
DuyguK

@DuyguK - вероятно, означает, что ваше хранилище ключей уже существует. Попробуйте удалить это и повторить. Или неверный путь, который вы могли указать
AnhSirk Dasarp

Боже, это заняло у меня часы. Спасибо вам большое!
Yenthe

Я хочу спросить, не замедляет ли как-то новый метод (получение хэшей ключей по коду) процесс onCreate. Потому что, насколько я знаю, когда создается подписанный APK, хеши ключей разные. В любом случае спасибо за код! :)
Марсон

будет ли более простой метод работать без эмулятора, но на реальном устройстве Android?

24

Самый простой способ сгенерировать хеш-ключ.

Требование: ключ SHA1

Вы можете получить ключ SHA1 из файла хранилища ключей двумя способами.

1) Найдите файл хранилища ключей, откройте командную строку в этом месте, затем используйте указанную ниже команду

keytool -list -v -keystore {keystore_name} -alias {alias_name}

а затем введите свой пароль, тогда он вернет ключ md5, sha1 и sha256.

ИЛИ

2) При запуске signingReport

См. Изображение ниже.

введите описание изображения здесь

после того, как вы запустите файл, ваш вывод будет сгенерирован, содержащий требуемый ключ sha1.

введите описание изображения здесь

После получения необходимого ключа SHA1

Затем перейти

http://tomeko.net/online_tools/hex_to_base64.php

и вставьте свой ключ sha1

введите описание изображения здесь

и, наконец, вы получите требуемый HashKey, который вы можете использовать для применения на facebook.


2
Этот ответ намного проще, чем другие, поскольку он заботится только о конечном результате. Всегда правильно. В других случаях, если процесс подписания настроен неправильно, мы не сможем исправить это.
hakuna1811

1
Потрясающая работа, как шарм Спасибо, приятель
Дирадж Джайсвал

14

Правильный ключ можно получить из самого приложения, добавив следующий код для тоста правильного хэша ключа (в случае Facebook SDK 3.0 и более поздних версий это работает)

try {
            PackageInfo info = getPackageManager().getPackageInfo("com.package.mypackage",         PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Log.e("MY KEY HASH:", sign);
                Toast.makeText(getApplicationContext(),sign,         Toast.LENGTH_LONG).show();
            }
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}

Замените com.package.mypackage своим именем пакета


Создайте HashKey для режима отладки и выпуска, используя this. stackoverflow.com/questions/7506392/…
Наим Ибрагим

12

I. Создание ключевого хэша отладки для facebook

Добавьте код для распечатки хэша ключа для facebook

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.google.shoppingvn", PackageManager.GET_SIGNATURES);
        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) {

    }

II. Создать релиз ключевого хэша для facebook

  1. Скачать openssl-0.9.8e_X64

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

  3. Распаковать Zip-файлы в папку openssl

  4. Пуск -> Выполнить: cmd (нажмите ввод)

  5. (нажмите) cd C: \ Program Files \ Java \ jdk1.6.0_45 \ bin. Примечание: C: \ Program Files \ Java \ jdk1.6.0_45 \ bin: путь к папке jdk на вашем компьютере

  6. (нажмите) keytool -exportcert -alias gci -keystore D: \ folder \ keystorerelease | C: \ openssl \ bin \ openssl sha1 -binary | C: \ openssl \ bin \ openssl base64. Примечание: D: \ folder \ keystorerelease: путь к вашему хранилищу ключей.

  7. Введите пароль хранилища ключей: это пароль, когда вы зарегистрируете хранилище ключей.

    Тогда у вас будет ключевой хеш: jDehABCDIQEDWAYz5Ow4sjsxLSw =

  8. Войти facebook. Доступ к управлению приложениями. Вставьте ключевой хеш в свое приложение на developers.facebook.com


Создайте HashKey для режима отладки и выпуска, используя this. stackoverflow.com/questions/7506392/…
Наим Ибрагим

9

ПРОСТОЕ РЕШЕНИЕ ДАННОЙ ПРОБЛЕМЫ:

У меня эта проблема уже два месяца. Мои ключевые хэши накапливались до 9. Сегодня я наконец нашел простое решение:

ШАГ 1:

Установите facebook sdk, который вы загрузили со страницы разработчика facebook на свой телефон. Не устанавливайте обычное приложение facebook. Убедитесь, что вы можете войти в facebook. Затем выйдите из системы.

ШАГ 2:

Экспортируйте приложение с ключом окончательной версии в виде apk, как если бы вы загружали его в игровой магазин.

ШАГ 3:

Поместите файл Apk на свой телефон через USB-кабель или USB-накопитель.

ШАГ 4:

Установите приложение с помощью файлового менеджера: Пример

ШАГ 5:

Запустите приложение и попробуйте войти в систему через facebook. Откроется диалоговое окно с сообщением: «Ключ YOURHASHKEY не найден в консоли разработчика facebook».

ШАГ 6:

Запишите ключ.

ШАГ 7:

Поместите его в консоль разработчика facebook и сохраните. Теперь все готово. Любой, кто загружает ваше приложение, опубликованное с использованием ранее использованного хранилища ключей, может войти в facebook.

наслаждаться


просто примечание: вам нужно поставить '=' после ключа, скопированного из журнала
akshay7692,

7

Если вы выпускаете, используйте хранилище ключей, которое вы использовали для экспорта приложения, а не debug.keystore.


1
Привет, я попытался использовать хранилище ключей моего приложения для генерации хэша ключей, но всякий раз, когда я пытаюсь поделиться чем-либо из своего приложения, я получаю ошибку, что приложение неправильно настроено для входа в Facebook. но когда я пытаюсь создать keyhash через debug.keystore, он работает. не могли бы вы помочь мне в этом.?
KunalK 05


6

Наконец :)

Вот моя история:

  1. Добавьте этот код в основное действие после настройки макета.

    try { 
      PackageInfo info = getPackageManager().getPackageInfo("PROJECTNAME", PackageManager.GET_SIGNATURES);
      for (Signature signature : info.signatures) {
          MessageDigest md = MessageDigest.getInstance("SHA");
          md.update(signature.toByteArray());
          String sign=Base64.encodeToString(md.digest(), Base64.DEFAULT);
          Log.e("MY KEY HASH:", sign);
          //textInstructionsOrLink = (TextView)findViewById(R.id.textstring);
          //textInstructionsOrLink.setText(sign);
          Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show();
      }
    } catch (NameNotFoundException e) {
        Log.d("nope","nope");
    } catch (NoSuchAlgorithmException e) {
    }
  2. Измените PROJECTNAME на название вашего пакета!

  3. Подпишите свое приложение (Инструменты Android-> Экспорт подписанного приложения)
  4. В вашем основном действии, когда вы вставляете код из 2 вариантов, в макете создайте TextView с id textstring
  5. раскомментируйте две строки, чтобы ваш код знака был установлен на TextView 6 Wuolia, у вас есть HASH, установите приложение на свой телефон !!! и проверьте свой хеш-ключ!
  6. Теперь, когда он виден, перейдите в созданное вами приложение facebook и добавьте его в [Key Hashes]
  7. Обратите внимание, что имя вашего пакета должно быть таким же, как в facebook [Package Name] в [Key Hashes]
  8. Хорошего дня :)

5

Однострочное решение для создания для facebook

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

4

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

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.7.0_40 \ bin).

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

keytool -exportcert -alias abcd-keystore D: \ Projects \ MyAppFolder \ keystore.txt | C: \ openssl \ bin \ openssl sha1 - двоичный | C: \ openssl \ bin \ openssl base64 ex - keytool -exportcert -alias (введите здесь ваше имя псевдонима apk, как имя моего подписанного apk псевдонима abcd) -keystore "подписанное apk сгенерированное хранилище ключей apth введите здесь" | "введите сюда путь к папке bin openssl" sha1 - бинарный | "Путь к папке openssl bin введите сюда" base64

7) Теперь вам нужно ввести пароль, Пароль = (введите здесь свой пароль хранилища ключей подписи)

8) у вас есть хранилище ключей, которое используется для хэша ключа выпуска приложения


3

Несмотря на то, что эта ветка устарела, я хотел бы поделиться своим опытом (недавно начал работать с facebook), который мне кажется прямым:

  1. Загрузите openssl по ссылке ниже: https://code.google.com/p/openssl-for-windows/downloads/list
  2. Разархивируйте его на локальный диск (например, C: \ openssl)
  3. Чтобы получить ключ разработки для интеграции с facebook, используйте следующую команду из командной строки в Windows:

    keytool -exportcert -alias androiddebugkey -keystore% HOMEPATH% .android \ debug.keystore | "C: \ openssl \ bin \ openssl.exe" sha1 -binary | "C: \ openssl \ bin \ openssl.exe" base64

ПРИМЕЧАНИЕ! Замените путь для openssl.exe (в этом примере это «C: \ openssl \ bin \ openssl.exe») на свой собственный путь установки.

  1. Он запросит пароль, например,

Введите пароль хранилища ключей: android

Введите android в качестве пароля, как показано выше.

Это оно! Вам будет предоставлен ключ длиной 28 символов. Ура!

Используйте ту же процедуру, чтобы получить ключ Release. Просто замените команду следующей и используйте псевдоним ключа выпуска.

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | "ПУТЬ ДЛЯ openssl.exe" sha1 -binary | openssl base64


но он показывает, что спрашивает пароль, я также даю подписанный пароль хранилища ключей, а затем показывает chines laungauge
Харша,

убедитесь, что путь указан правильно для openssl \ bin и java ... \ bin
KawaiKx

3

Создать хэш-ключ отладки

  public String hashkey(Context context) {
        String keyhash = "";
        try {
            PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                keyhash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
        return keyhash;
    }

Создать хэш-ключ выпуска

 keytool -exportcert -alias specialbridge -keystore /home/shilpi/newproject/specialBridge/SpecialBridgeAndroid/keystore/specialbridge.jks | openssl sha1 -binary | openssl base64

2

Отличный пост в блоге на эту тему

Извлечение хэша ключа из ключа .p12

  1. Откройте терминал или командную строку и перейдите туда, где находится ваш ключ .p12.
  2. Введите: «keytool -v -list -keystore mycert.p12 -storetype pkcs12 ″, где mycert.p12 - имя файла вашего ключа .p12.
  3. Введите пароль хранилища ключей (тот, который вы использовали при экспорте ключа .p12). 4. Скопируйте текст байтов подписи отпечатка пальца sha1.
  4. Байты сигнатуры отпечатка пальца sha1 необходимы для записи файла «sha1.bin». Вы можете использовать шестнадцатеричный редактор, чтобы вставить скопированные байты. После этого сохраните файл как «sha1.bin».
  5. Снова откройте терминал и введите: «openssl base64 -in sha1.bin -out base64.txt».
  6. Полученный в результате «base64.txt» будет содержать хэш ключа, необходимый для Facebook.

Отличный и простой шестнадцатеричный редактор для Mac: HexFiend

OpenSSL должен быть предварительно установлен на Mac, и вот ссылка на версию для Windows.

Ссылка на сайт


Это отличная информация для разработчиков приложений Adobe AIR (Flash или Apache Flex). И «Имя класса» для единого входа в Facebook должно бытьAppEntry
Александр Фарбер

2

Попробуйте передать пароль для ключа и сохранить как часть команды

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -keypass android -storepass android \
| openssl sha1 -binary \
| openssl base64

1

Я смог выполнить запрошенную задачу с некоторыми решениями здесь, но подумал про себя, мальчик, это глупо ... почему бы не написать небольшой Java-код, который делает это, и упаковать его в Jar, что я и сделал. ..

Ссылка на скачивание фляги

Работает на Windows 8 ... с другими ОС не пробовал.


1
Чего я не понимаю, так это то, что если мне потребовалось несколько часов, чтобы все это изучить и набросать, почему ни одна из крупных компаний не сделала этого еще, чтобы предоставить нам простой способ получить информацию, которую они просят у нас ???
TacB0sS

1

Привет всем, моя история, как я подписываюсь, имеет ключ для Facebook

прежде всего, вам просто нужно скопировать эти 2 метода в свой первый класс

    private void getAppKeyHash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md;

            md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String something = new String(Base64.encode(md.digest(), 0));
            System.out.println("HASH  " + something);
            showSignedHashKey(something);

        }
    } catch (NameNotFoundException e1) {
        // TODO Auto-generated catch block
        Log.e("name not found", e1.toString());
    } catch (NoSuchAlgorithmException e) {

        Log.e("no such an algorithm", e.toString());
    } catch (Exception e) {
        Log.e("exception", e.toString());
    }
}
public void showSignedHashKey(String hashKey) {

    AlertDialog.Builder adb = new AlertDialog.Builder(this);
    adb.setTitle("Note Signed Hash Key");
    adb.setMessage(hashKey);
    adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {

        }
    });

    adb.show();
}

** Вызовите функцию getAppKeyHash () из вашего метода oncreate, если вы хотите подписанный хеш, затем сделайте подписанную сборку, установите подписанную сборку и запустите, вы получите хеш-ключ в диалоговом окне, затем просто отметьте его и обновите в учетной записи разработчика facebook и прокомментируйте эту функцию и сделайте еще одну подписанный APK **


1

Если ваш пароль = android неправильный, тогда поставьте свой пароль компьютера, чтобы он работал у меня.

А для генерации keyHash попробуйте эту ссылку Здесь


0

Единственное, что у меня работает, это использование пароля android. Почему это не упоминается ни в одном руководстве?


0

используйте это в kotlin для печати хэша ключа в журнале

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.