Найти ключевой хеш для подписанного приложения - PullRequest
22 голосов
/ 27 апреля 2011

Я подписал свое приложение и экспортировал его в папку на рабочем столе, которая называется app. В этой папке находится само мое приложение и хранилище ключей.Как мне найти ключевой хеш, который я могу скопировать на страницу разработчиков Facebook.я установил openssl, но, похоже, не могу сгенерировать хэш ключа, я перепробовал много других потоков в стеке, и ни один из них не помог, спасибо

Джеймс

Ответы [ 7 ]

49 голосов
/ 27 апреля 2011
  1. Вы должны знать, где находится ваш файл хранилища ключей.Для меня это C:\Users\Selvin\Desktop\selvin.kp
  2. Вы должны знать свой псевдоним в хранилище ключей.Для меня это selvin
  3. Вы должны знать путь к keytool.C:\Program Files\Java\jdk1.6.0_22\bin\keytool.exe
  4. Вы должны знать путь к openssl.C:\OpenSSL-Win32\bin\openssl.exe
  5. Вы должны знать пароль к хранилищу ключей.Для меня это ***** хе-хе

Тогда вам следует позвонить:

C: \ Program Files \ Java \ jdk1.6.0_22 \ bin \ keytool.exe "-exportcert -alias selvin -keystore c: \ users \ selvin \ desktop \ selvin.kp | C: \ OpenSSL-Win32 \ bin \ openssl sha1 -binary | C: \ OpenSSL-Win32 \ bin \ openssl base64

Замените мой путь и псевдоним на правильные.

Тогда вы должны увидеть:

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

Введите свойпароль, и вы должны получить что-то вроде этого: NfhDlIH7XWJzUZRjL+pZySrMX1Q=

EDITED : NfgDlIG7XWJzUZRUL+bZySrMX1Q= <- это плохой хэш. Или вам повезло, что ваш ключ совершил такое же столкновение, что и </p>

ошибка: ошибка keytool: java.lang.Exception: псевдоним не существует

Если хеш не работает:

Сначала вызовите

C: \ Program Files \ Java \ jdk1.6.0_22 \ bin \ keytool.exe "-exportcert -alias selvin -keystore c: \ users \ selvin \ desktop \ selvin.kp

Введите пароль и прочитайте ошибку

Если вы не помнитеber ваш псевдоним keytool error: java.lang.Exception: Alias <selvinn> does not exist Я использовал selvinn, чтобы показать ошибку.

Список всех ваших записей / псевдонимов:

C: \ Program Files \ Java \ jdk1.6.0_22\ bin \ keytool.exe -list -keystore c: \ users \ selvin \ desktop \ selvin.kp

второе редактирование

enter image description here

21 голосов
/ 05 сентября 2012

Для тех, кто все еще борется, я обнаружил, что эти шаги при правильном выполнении, безусловно, будут работать, но они могут быть довольно сложными, чтобы получить правильный первый раз, и на самом деле я обнаружил, что иногда преобразование отпечатка пальца в base64 при работе с некоторым псевдонимом 'не работают (хэш по какой-то причине усекается)Я написал различные командные файлы, в которых собрана большая часть этих инструкций, уже упомянутых вместе, поэтому я не исключаю проблем там.

Однако, по сути, большинство людей падают на стадии openssl (либо не могут найтиэто, не знаю, как его использовать, или трубопровод Windows не правильно связывает выходные данные из экспорта SHA1 с входом преобразования base64).

Чтобы обойти это, вы можете использовать альтернативный метод, которыйвероятно, легче понять и понять.По сути, API-интерфейс facebook хочет, чтобы представление base64 (кодирование) хэша SHA1 использовалось для идентификации вашего APK.Для этого вы можете просто перечислить хранилище ключей:

"C:\Program Files\Java\JRE6\Bin\keytool.exe" -list -v -keystore "Path-to-your-keystore" -storepass "KeystorePassword" > somefile.txt

Очевидно, вам нужно изменить путь к исполняемому файлу keytool в соответствии с вашими настройками и заменить «Path-to-your-keystore» и «KeystorePassword»."с вашим путем и паролем хранилища ключей!Результатом должно стать создание файла "sometext.txt" в текущей папке, который затем можно открыть в любом текстовом редакторе.В текстовом файле будут перечислены все псевдонимы хранилища ключей и соответствующие им хэши MD5 и SHA1 в виде шестнадцатеричных строк.

Теперь просто найдите псевдоним, используемый для подписи вашего APK, скопируйте хеш SHA1 и используйте любой онлайн-гекс дляконвертер base64 для преобразования его в формат кодировки base64, который требуется для facebook.Вы можете найти онлайн-конвертер, прибегая к помощи онлайн-конвертера hex в base64.Я использовал этот , так как вы можете просто скопировать и вставить строку прямо из текстового файла в предоставленное поле, и он просто удалит двоеточия, разделяющие каждый шестнадцатеричный байт.

Одна заключительная точка (несколько очевидная, но ..) только скопируйте и вставьте шестнадцатеричную строку, а НЕ префикс SHA1:!

Надеюсь, это кому-нибудь поможет;это, безусловно, работает для меня!

14 голосов
/ 19 января 2012

Сначала я хотел бы поблагодарить Селвина!

Этот ответ почти идентичен ответу Селвина, но мне все еще потребовалось 3 часа, чтобы заставить его работать: P, так что еще немного учебника для настоящих новичков

Как получить hashKey из хранилища ключей

  • сначала установите OpenSSL из кода Google и поместите его в папку C: \ ссылка для скачивания
  • найти местоположение программы keytool (по умолчанию в java папка)
  • найти расположение хранилища ключей (есть значение по умолчанию для отладки)

расположение keytool C: \ Program Files (x86) \ Java \ jdk1.xxx) \ bin \ keytool расположение openssl C: \ OpenSSL-Win32 \ bin \ OpenSSL хранилище ключей местоположения (отладки) C: \ Users [usernamepc] .android \ debug.keystore

открыть cmd в windows (start-> run-> cmd) и перейти к расположению keytool или скопируйте и вставьте следующую строку, обратите внимание, что вы не можете использовать Ctrl + V, но щелкните правой кнопкой мыши

cd c:\program files (x86)\java\jdk1.7.0_01\bin

когда в нужном каталоге вставьте эту строку в строку cmd:

keytool.exe -exportcert -alias androiddebugkey -keystore c:\users\charx\.android\debug.keystore | C:\OpenSSL-Win32\bin\openssl sha1 -binary | C:\OpenSSL-Win32\bin\openssl base64

"C: \ OpenSSL-Win32 \ bin \ openssl" - это путь к opensssl.exe, замените его на путь к openssl.exe

убедитесь, что вы изменили [usernamepc] вашего на имя вашего компьютера, как вы можете видеть в моем случае это charx. Также каталог для java jdk xxxx зависит от вашей версии.

cmd должен показать hashkey

ключ хеша для моего файла отладки:

h1GdQbgB8b/liCG+acmZWkgIRHA=
9 голосов
/ 10 июня 2014

Решение с Eclipse (для таких ленивых, как я).

Выберите любой проект в Eclipse, Export - Android Application, введите свой ключевой пароль и т. Д., И на последней странице внизу вы увидите MD5: .... SHA1: ....

Скопируйте строку SHA1 и вставьте ее в любой онлайн-конвертер HEX-Base64 (например, такой: http://tomeko.net/online_tools/hex_to_base64.php)

Congrats! У вас есть ключевой хеш, необходимый для консоли разработчика Facebook.

4 голосов
/ 26 июля 2014

Решения, упомянутые выше, по какой-то причине мне не помогли, но я смог успешно сгенерировать keyhash. Я пишу 10 самых простых шагов, чтобы получить хеш-ключ вашего подписанного apk [apk подписан с хранилищем ключей] :

  1. Скопируйте приведенный ниже код в ваш activity [start Activity]. Этот код должен содержаться в вашем действии, чтобы вы могли извлечь правильный хеш-код при запуске подписанного действия apk.

    private void getHashKey() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.e("MY_KEY_HASH:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {
    } catch (NoSuchAlgorithmException e) {
    } }
    
  2. Ваш AndroidManifest.xml файл должен иметь атрибут android:allowBackup="true" в своем теге приложения.

  3. Экспортируйте подписанный apk и установите приложение на свой мобильный телефон, а затем подключите свой телефон в режиме отладки с помощью usb debugging on.

  4. Затем перейдите к sdk\platform-tools

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

  6. Затем введите adb logcat >"log.txt". Ваш cmd экран будет зависать. Не паникуйте. Это совершенно нормально, так как весь logcat записывается в log.txt.

  7. Запустите ваше приложение и, надеюсь, когда вы думаете, что getHashKey() выполняется функция, затем нажмите ctrl+c в командной строке, чтобы завершить запись файла журнала.

  8. Теперь командная строка снова станет отзывчивой. Теперь иди в ваш sdk\platform-tools dir, и вы увидите, что файл log.txt был создан, который содержит журналы.

  9. Теперь откройте его в texteditor и найдите MY_KEY_HASH: "----------- Ваш ключ -------"

  10. Скопируйте это на ваш FB account или там, где вам нужно, а затем сделайте еще одну сборку, в которой функции android:allowBackup="false" и getHashKey() удален.

Надеюсь, это помогло всем:)

3 голосов
/ 11 июля 2012

Я не мог быть обеспокоен всем этим, я вижу, что фактически отправляет SDK Facebook экспорт моего подписанного приложения с временным кодом для отображения facebook error.toString () в Авторизовать, который дает хеш-ключ, который он ищет, я помещаю это в свое приложение для Facebook и бинго!

0 голосов
/ 17 октября 2017

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

keytool -list -v -keystore keystore.jks |findstr "Создание псевдонима"

...