Ключевой хэш для приложения Android-Facebook


229

Я работаю над приложением для Android, в которое хочу интегрировать функцию публикации в Facebook. Я скачал Facebook-Android SDK и получил там readme.md (текстовый файл), в котором упоминается, что он генерирует хэш ключа для Android. Как мне это сгенерировать?


2
Вы можете проверить эту ссылку javatechig.com/2012/12/10/…
Nilanchal

2
проверьте это Для тех, кто все еще сталкивается с проблемой,
Чинтан Хетия

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

Чтобы получить ключи, посмотрите это видео
Скоро Сантос

Ответы:


310

Вот шаги

  1. Загрузите openssl из кода Google (если у вас 64-битная машина, вы должны загрузить openssl-0.9.8e X64 не последнюю версию)

  2. Извлеките это. создайте папку - OpenSSL в C: / и скопируйте извлеченный код здесь.

  3. определить путь к файлу debug.keystore. Если вы не нашли, то выполните поиск в C: / и используйте путь в команде на следующем шаге.

  4. определите путь к файлу keytool.exe и перейдите в командную строку этого каталога / dir и выполните эту команду в 1 строке

    $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Documents and Settings \ Administrator.android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64

    • он попросит пароль, поставь андроид
    • вот и все. ты получишь ключик

Для получения дополнительной информации посетите здесь


5
Этот ответ почти работал у меня на Win7 x64. Однако полученный закодированный сертификат был неверным. Ответ Брайана Бедарда ниже даст правильное значение сертификата. Я предполагаю, что трубопроводы на окнах как-то виновны.
Walt Armor

10
Примечание для 64-битных пользователей: это работает с версией openssl-0.9.8e X64, только не использовать с openssl-0.9.8k X64
Никола Пелучетти

Я скачал openssl-0.9.8e X64 для своей системы и распаковал его. Он не содержит ничего, кроме одного файла с некоторыми данными. Пожалуйста, помогите мне узнать больше.
Равикиран

2
Команда должна быть выполнена в папке bin Java в системах Windows.
Антрромет

1
@HanishSharma Попробуйте опустить $.
запрет геоинженерии

241

[РЕДАКТИРОВАТЬ 2020] -> Теперь я полностью рекомендую ответ здесь , гораздо проще с помощью Android Studio, быстрее и не нужно писать какой-либо код - приведенный ниже был в дни затмения :) -.

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

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", 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));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (NameNotFoundException e1) {
    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());
}

Вы можете удалить код, узнав ключ;)


27
Ребята, будьте осторожны, после создания apk ключ хеша меняется! потому что, используя этот код, вы получаете хеш отладочного хранилища ключей, но при создании apk это еще один хеш, нужно захватить его из журнала после попытки ur apk на эмуляторе, затем удалить код и снова экспортировать без этого журнала :) - я знаю, что это хлопотно: D но для меня это было проще, чем keytool, удачи;)
Bassem Wissa

4
Opensssl всегда создает проблемы. Этот метод самый лучший. Просто создайте пустое приложение и напечатайте ключ. Используйте его. Спасибо чувак!!
AnhSirk Dasarp

1
Это, безусловно, самое простое решение. Используя keytoolкоманду, я получал неправильные ключевые хэши (я понятия не имею, почему, решил, что мне было все равно, чтобы исследовать). Это сработало, и буквально потребовалось 5 минут, чтобы получить ключи отладки и отладки. +1
Крис Сирфице

1
Да, Себастьян, вам просто нужно установить подписанный apk на устройстве, подключить его к Android Studio и проверить журнал cat, или вы можете показать хеш в текстовом редакторе в пользовательском интерфейсе и скопировать его, в любом случае, да, хеш, который этот код создает, работает с подписанный апк :)
Bassem Wissa

1
использование keytool такой беспорядок, это действительно просто
Табиш

135

Я создал небольшой инструмент для Windows и Mac OS X. Просто добавьте файл хранилища ключей и получите ключ хеша.

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

Проверьте это, загрузите версию для Windows или загрузите версию для Mac OS X (Dev-Host иногда может быть недоступен ... поэтому, если ссылка не работает, напишите мне в личку, и я исправлю это).

Надеюсь, это поможет вам, ребята ...

31 декабря 2014 г. - РЕДАКТИРОВАТЬ: Изменен хост на AFH. Пожалуйста, дайте мне знать, если ссылки не работают

21 ноября 2013 г. - РЕДАКТИРОВАТЬ:

По запросу пользователей, я добавил расположение хранилища ключей по умолчанию и кнопку «ПОЖАЛУЙСТА». Не стесняйтесь использовать его, если я помог вам. :)

Скриншот Снимок экрана 2


1
Лучший. Метод. Когда-либо. Где кнопка пожертвования?
Адам Varhegyi

1
@ Shahar2k5 Не знаю на самом деле, начал снова и работал как шарм. Извините
Anearion

1
Работает как шарм! Спасибо, что поделились :)
Vinayak

1
@ Shahar Barsheshet Спасибо. Ты прав. Скачано с домена Devhost и никаких проблем не возникало.
MajorGeek

1
Я чего-то не понимаю: почему ваш инструмент дает другой ключ SHA по сравнению с keytoolкомандной строкой? Разве он не должен давать идентичные результаты, если применяется к одному и тому же файлу хранилища ключей?
фиксированной ночью

64

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

Начните с загрузки openssl для Windows из Google.

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

После выполнения этих команд действительный хэш сохраняется в файле base64.txt. Скопируйте и вставьте это в настройки своего приложения на Facebook.


Работает отлично, все остальное не получается.
Оливер Диксон

2
Какая ПИТА - но Брайан прав! Команда будет выводить хеш почти независимо от того, что, если ваш путь неверен, пароль неверен, или каналы не работают должным образом - вы все равно получите хэш, но он не будет работать. Поэтому (на Windows) я отказался от Powershell и попробовал Cygwin - все еще не работает. Только после копирования файла debug.keystore в рабочий каталог я смог запустить его и работать !!
Бобби

2
Итак, в итоге, в Windows, либо используйте технику Брайана для ее разделения, либо используйте cygwin с вашим файлом хранилища ключей в рабочем каталоге: keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 Если он не запрашивает пароль, значит, он не нашел файл хранилища ключей должным образом.
Бобби

Работал отлично для меня. Отличный ответ.
Рон

Если вы хотите избежать получения хэшей для неправильных паролей, просто проверьте mycert.bin, прежде чем продолжить работу с openSSL. В противном случае вы бы хэшировали неверный текст ошибки пароля :)
Vaiden

50

Вот что дано на официальной странице Facebook :

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

Позвольте мне разбить эту команду на фрагменты.

  1. Ищите "keytool.exe". Вы можете искать это на диске C :. Вы можете найти это в "java jdk"или "java jre". Если вы установили несколько версий, выберите любую.

  2. Откройте подсказку CMD и перейдите в каталог выше, где вы нашли "keytool.exe".

    Кликните «exe`» и вставьте указанную выше команду, представленную на странице Facebook.

  3. При вводе этого сообщения вы получите сообщение об ошибке, что OpenSSL не распознается как команда ввода-вывода Решение: Загрузите Openssl из OpenSSL (если у вас 64-битная машина, вы должны загрузить openssl-0.9.8e X64 ). Распакуйте и сохраните в любом месте ... Я сохранил его на диске C: в OpenSSlпапке

  4. Замените openssl в приведенной выше команде, в которой вы получили ошибку OpenSSL, на «C: \ OpenSSL \ bin \ openssl» в обоих местах после канала, «|».

  5. Если будет предложено ввести пароль, введите android.

И вы получите свой ключ хеша. Для дальнейших шагов, обратитесь к странице Facebook.


32

Добавьте этот код к onCreateсвоей деятельности, он напечатает хеш под тегом KeyHash в вашем logCat

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           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));
    }
}
catch (NameNotFoundException e) {

}
catch (NoSuchAlgorithmException e) {

}

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


отличное решение, я думаю, не должно быть исполняемой неподписанной версии? неподписанная версия не может быть установлена ​​на любом устройстве. Эти отладочные версии подписаны хранилищем ключей отладки :)
benleung

26

Чтобы получить хэш-код ключа Android, выполните следующие действия:

  1. Загрузите OpenSSL для Windows здесь
  2. Теперь распакуйте на диск C
  3. Откройте приглашение CMD
  4. Тип cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. Затем введите только keytool -export -alias myAlias -keystore C:\Users\ваше имя пользователя\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. Готово

2
Отличный ответ. Большое спасибо.
Палани Кумар

1
Это для ключа отладки или для ключа разблокировки?
Игорь Ганапольский

@IgorGanapolsky вместо пути укажите myKeyStoreпуть к своему ключу освобождения. Приведенный выше код предназначен для ключа отладки
Pallavi

17

Самое простое решение, которое я нашел, это:

  • Откройте Log Cat
  • Попробуйте получить доступ к Facebook с помощью Android SDK
  • Найдите в журнале строку, которая выглядит следующим образом:

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
  • Скопируйте «abcdefgHIJKLMN + OPqrstuvwzyz» и вставьте его в область «Хэш-ключ» Facebook Android.


это самый простой и эффективный способ, просто возьмите его из журналов даже без openssl!
Лука К.

это единственное отработанное решение для меня! Я не вижу журнал, как вы, но я вижу это KeyHash: XWwXXXXX/5xxxxxxxxxxx=в журнале и помог мне!
Кханг Динь Хоанг

14

Вы можете получить хеш ключа от ключа SHA-1. Это очень просто, вам нужно получить ключ SHA-1 (подписанный APK) в магазине Play, проверьте изображение ниже.введите описание изображения здесь

Теперь скопируйте этот ключ SHA-1 и вставьте его на этом веб-сайте http://tomeko.net, а также проверьте изображение ниже, чтобы получить ключ-хэш.

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


1
Спасибо. Я пытался получить ключ хэш с помощью OpenSSL. Это заняло у меня 1 минуту, и это было легко.
Зеленый Ю.

1
Большое спасибо! Это было решением, так как Google сейчас подписывает мое приложение (я просто использую сертификат загрузки / хранилище ключей)
Харрисон

13

Я сделал по этому пути для ОС Linux и ОС Windows :

Linux:

  • Скачать Openssl
  • Открытый терминал
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

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

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

Итак, наконец, вы получите Release Hashkey .

Окна:

Шаги для выпуска Hashkey :

  • Скачать Openssl (Скачать отсюда ), я скачал для 64-битной ОС, вы можете найти больше здесь
  • Распакуйте загруженный zip-файл только на диск C: \
  • Открыть командную строку
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

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

Примечание:

Пожалуйста, оставьте свои данные там, где я отметил ** **.

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

Итак, наконец, вы получите Release Hashkey .

Готово


какой пароль здесь?
Акаш Бисария

@AkashBisariya, пароль хранилища ключей, который вы дали при создании хранилища ключей.
Хирен Патель

Где я могу найти ключ после успешно сгенерированного?
Ананд Пхадке

11
  • скачать OpenSSL для Windows здесь вы можете найти 64-битные и 32-битные здесь

  • извлечь загруженный файл

  • создать имя папки openSSL на диске C
  • скопировать все извлеченные элементы в папку openSSL (bin, include, lib, openssl.cnf)
  • получить хранилище ключей отладки Android, расположение по умолчанию будет

C: \ Users \ имя пользователя \ .android \ debug.keystore

  • Теперь получите командную строку и вставьте этот код

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

  • нажмите Enter, и вы получите 28-значный код

НЕТ, он просит пароль. набор androidдает 24-значный хэш, а набор aдает 28-значный хэш. Понятия не имею почему!
sud007

плохие ссылки! у них вообще нет
keytool

6

Вам необходимо создать хранилище ключей с помощью keytool для подписанных приложений для Android, как описано в разделе « Сайт Android», затем установить Cygwin, а затем установить openssl из кода Google. затем просто выполнить следующую команду, и вы получите хеш ключ для Android, а затем вставьте этот хэш-ключ в приложение Facebook, которое вы создали. И тогда вы можете получить доступ к приложению facebook через приложение Android для публикации стены (например, «publish_stream»).

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64

Вам необходимо выполнить приведенную выше команду из Cygwin.


6

Загрузите openSSL -> Установите его -> обычно он устанавливается в C: \ OpenSSL

затем откройте cmd и введите

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

чтобы проверить версию jdk, перейдите в C: / program files / java / jdk_version

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

Он попросит вас ввести пароль для Android.


6
  1. Просто откройте ваш основной файл активности и создайте функцию, упомянутую ниже:

         try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your.application.package.name",
                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 (PackageManager.NameNotFoundException e) {
    
    } catch (NoSuchAlgorithmException e) {
     }

1.1 Запустите ваше приложение, это сгенерирует хеш-ключ для вашего приложения.

  1. Теперь откройте журнал cat и выполните поиск с помощью «KeyHash» и скопируйте ключ хеша.

  2. Сгенерировав ключ Hash, вы можете удалить эту функцию.


5

1) Создайте ключ для подписи вашего приложения и запомните псевдоним.

2) Установите OpenSSL.

3) Поместите папку bin OpenSSL на ваш путь.

4) Выполните действия, указанные в разделе «Настройка единого входа» в FB-Android-SDK. странице , и сгенерируйте свой хэш-ключ. Убедитесь, что вы правильно указали псевдоним и имя файла хранилища ключей.

5) Создайте приложение в Facebok и на вкладке «Мобильные устройства» введите этот хэш-ключ.


5

Официальная документация на сайте разработчика Facebook :

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

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                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) {

    }

@WilliamKinaan: в любое время;): P
Хардик Такер

@HardikThaker Я использовал ваш код, он дает мне точно такой же хэш, который я получил с помощью терминала с помощью этой команды, keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64и я все еще получаю, что хеш-код ключа не соответствует ни одному из сохраненных хеш-ключей
Шань Ксиши

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

Это сработало для меня ...

шаги:

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

4

Для Linux

Открытый терминал:

Для отладки сборки

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

вы найдете debug.keystore из папки ".android", скопируйте его и вставьте на рабочий стол и выполните команду выше

Для выпуска Build

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

ПРИМЕЧАНИЕ. Убедитесь, что в обоих случаях требуется запрос пароля. Если он не запрашивает пароль, значит, что-то не так в команде.


Я получаю разные значения с разными псевдонимами, как проверить, какое из них правильное?
Джаваль Нанда,

он спрашивает пароль с псевдонимом?
Бирадж Залавадия,

да, и любой пароль, который я ввожу, дает мне хэш-ключ. Мое приложение уже находится в магазине воспроизведения, а встроенный fb не работает. В любом случае мне нужно будет сгенерировать точный хэш ключа для сборки релиза. Разработчики предлагают включить код в onCreate в следующем посте, но я хочу, чтобы он работал без обновления приложения в playstore stackoverflow.com/questions/15021790/…
Нанда,

да есть проблема с вдовами с openssl. Вы можете достичь с помощью кода, указанного в этом посте.
Бирадж Залавадия,

Если вы хотите обойтись без обновления на PlayStore. 1) Создать новое приложение Android Demp. 2) Поместите этот кусок кода на создание. 3) подписать это демонстрационное приложение с тем же хранилищем ключей вашего приложения в магазине приложений 4) затем запустить этот подписанный apk 5) и наконец использовать этот ключ хеша
Biraj Zalavadia

4

Для приложения Android

Этот код используется для получения хеш-ключа в вашем приложении Android для интеграции с Facebook. Я проверил все устройства, и это работает. Измените только имя пакета этого кода:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

4

В ответ на похожую проблему я обнаружил, что это работает для меня:

  • Скопируйте apkname.apkфайл, который вы хотите знать хеш, в ' Java \ jdk1.7.0_79 \ bin папку »
  • Запустите эту команду keytool -list -printcert -jarfile apkname.apk
  • Скопируйте SHA1значение и конвертируйте его, используя этот сайт
  • Используйте преобразованное значение Keyhash ( например, zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

Самое простое решение:

  1. Не добавляйте ключ хеша, реализуйте все остальное
  2. При нажатии входа в Facebook вы получите сообщение об ошибке «Недопустимый хэш ключа. Хэш ключа« xxx »не соответствует ни одной сохраненной клавише. ...»
  3. Откройте инструментальную панель приложения facebook и добавьте хэш "xxx =" (хэш "xxx" от ошибки + знак "=")

3

Чтобы создать хэш ключа разблокировки, выполните следующую команду на Mac или Windows, заменив псевдоним ключа разблокировки и путь к хранилищу ключей.

В Windows используйте:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Эта команда должна генерировать строку из 28 символов. Помните, что КОПИРУЙТЕ и ВСТАВЛЯЙТЕ этот хэш-ключ релиза в настройки Android вашего идентификатора приложения Facebook.

image: fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

См. Https://developers.facebook.com/docs/android/getting-started#release-key-hash и http://note.taable.com.


3

Используйте это для печати ключа хэша в 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){

    }

2

Решил мой тоже в Android Studio, но с немного другим подходом.

Получить значение SHA-1 в Android Studio.

  1. Нажмите Gradle
  2. Нажмите Отчет о подписи
  3. Копировать SHA-1

Нажмите отмеченную панель в Android-студии

  1. Значение SHA-1 выглядит следующим образом: CD: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8D: 44: 84

    и откройте http://tomeko.net/online_tools/hex_to_base64.php, чтобы преобразовать значение SHA1 в base64. Это то, что Facebook требует, чтобы получить сгенерированный хеш "******************** =" и скопировать ключ хеша в консоль приложения facebook.

Часть этого ответа взята отсюда Github Link


2

Существует два метода: сложный и простой.

Методы первый: (немного сложный)

Прежде всего, вам нужно скачать ssl 64bit или, 32bitсоответственно, не забудьте скачать файл с именем, содержащим eпосле кода версии openssl-0.9.8e_X64.zip ИЛИ openssl-0.9.8e_WIN32.zip не с kкодом после версии,

и поместите в каталог AndroidStudio / jre / bin, если вы не знаете, где разместить, вы можете найти этот каталог, щелкнув правой кнопкой мыши на ярлыке Android Studio как:

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

Теперь вы умудрились два необходимых вещей в одном месте, но все же вы должны найти путь для вашего debug.keystore, что всегда можно найти в "C:\Users\yourusernamehere\.android\debug.keystore",

ПРИМЕЧАНИЕ Если ваше приложение уже опубликовано или готовится к публикации, используйте хранилище ключей подписи публикации, если и только если вы тестируете в режиме разработки, чем вы можете использовать debug, keysotre

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

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

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

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

Второй метод (соответственно легкий)

если вы не хотите проходить через все вышеперечисленные процедуры, просто используйте следующий метод для регистрации haskey:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

вывод:

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


1

Наилучший подход - использовать следующий код:

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

Но я был так расстроен тем фактом, что не существует простого инструмента для генерации HashKey для приложения Facebook. Каждый раз мне приходилось играть с Openssl и Keytool или использовать код, чтобы получить хэш из подписи ...

Поэтому я написал простой KeyGenTool, который сделает эту работу за вас: -> KeyGenTool в Google Play <-

Наслаждаться :)


1

Я сделал небольшую ошибку, которую следует иметь в виду. Если вы используете хранилище ключей, тогда дайте свое псевдоним, а не androiddebugkey ...

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

Пожалуйста, смотрите ниже.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

Затем нажмите Enter- он попросит вас ввести пароль, а затем введите пароль хранилища ключей, а не Android.

Прохладно.


0
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    Button btn;
    EditText et;
    PackageInfo info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button1);
        et=(EditText)findViewById(R.id.editText1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    info = getPackageManager().getPackageInfo("com.example.id", 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));
                        //String something = new String(Base64.encodeBytes(md.digest()));
                        et.setText("" + something);
                        Log.e("hash key", something);
                    }
                } catch (NameNotFoundException e1) {
                    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());
                }
            }
        });
    }



}

Этот код не генерирует правильный ключ хеш для меня. Ответ @ Jamshid работает для меня на Mac OSX.
Loolooii

0

Kotlin код для получения ключа Hash

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

Пожалуйста, не забывайте генерировать ключи в среде Debug и Release, так как они меняются в соответствии с настройкой сборки.


0

попробуй это :

  • два способа получить значение хэш-ключа

1) получить ключ хеша из командной строки (Официальный документ: https://developers.facebook.com/docs/android/getting-started )

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

ИЛИ

2) получить ключ хеша с помощью кода

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.