Facebook Android Створення ключових хеш


119

Намагаючись створити додаток для Android з інтеграцією у Facebook, я потрапив до тієї частини в документах, де вам потрібно генерувати ключовий хеш-файл, він визначає запуск наступного коду

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

Коли я запускаю це в своєму терміналі, я отримую помилку щодо підробки Keystore, або пароль був неправильним,

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

Чи може хтось вказати мені в правильному напрямку?


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

Коли ви вводите команду в термінал, це не дає мені можливості ввести пароль
Скотт

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

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

Відповіді:


20

Видаліть сертифікат налагодження під ~ / .android / debug.keystore (для Linux та Mac OS X); каталог щось на зразок Android USERHOME% /. для Windows.

Потім плагін Eclipse повинен генерувати новий сертифікат при наступній спробі створити пакет налагодження.

Повідомте мене, якщо це працює.


не працювало. видалив файл debug.keystore, зробив налагодження, файл ніколи не повертався. зауваживши, що в цій папці оновлено.
CthulhuJon

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

Створіть HashKey для налагодження та режиму випуску за допомогою цього. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

281

Щоб генерувати ключовий хеш, потрібно виконати кілька простих кроків.

1) Завантажте Openssl з: тут.

2) Створіть папку openssl на диску C

3) Витягніть Zip-файли в цю папку openssl, створену на C Drive.

4) Скопіюйте файл Файл debug.keystore з папки .android у моєму випадку (C: \ Users \ SYSTEM.android) та вставте в папку JDK bin Folder у моєму випадку (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) Тепер вам потрібно ввести пароль , Пароль = android.

8) Якщо ви побачите у папці openssl Bin, ви отримаєте файл з назвою debug.txt

9) Тепер або ви можете перезапустити командний рядок, або працювати з існуючим командним рядком

10) поверніться до диска C і подайте шлях до папки openssl Bin

11) скопіюйте наступний код і вставте

openssl sha1 -binary debug.txt> debug_sha.txt

12) ви отримаєте debug_sha.txt у папці openssl bin

13) Знову скопіюйте наступний код і вставте

openssl base64 -в debug_sha.txt> debug_base64.txt

14) ви отримаєте debug_base64.txt у папці openssl bin

15) відкрити файл debug_base64.txt Ось ваш хеш-ключ.


4
приємна відповідь +1 для вас я дотримувався цього і отримую бажаний результат :)
BBdev

Я отримую це: помилка keytool: java.io.IOException: Keystore було підроблено, або пароль був неправильним. Як я можу знайти свій правильний пароль?
DuyguK

Це працювало для мене після 2 днів плутанини щодо того, що відбувається. Блискуча робота!
rennoDeniro

4
@Vizzz: Хороший спосіб пояснення для створення ключового хешу. Дякуємо за цю публікацію, сподіваюся, що ця публікація заощадить багато часу на якійсь.
Емран Хамза

1
Я перепробував кожен код, але ніколи не отримав потрібного результату. Я спробував код з фейсбуку, він також є тим же самим, що всі три команди в одній команді, але запуск трьох команд окремо дав правильний код і працював, година пошуку або, можливо, дні пошуку. Дякую. До цього тільки код у додатку для Android давав правильний результат, командна строка давала недійсні ключі, тепер все добре. Ще раз
дякую

149

ОНОВЛЕНО ВІДПОВІДЬ (Створення за допомогою коду) Простіший метод:

На мій досвід, Opensl завжди викликає занепокоєння, я спробував другий метод, запропонований 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 -бінарний | openssl base64

ПРИМІТКА : у наведеному вище коді зауважте, що вам потрібно надати свій шлях користувачеві (тобто в моєму випадку це C: \ Users \ Anhsirk, вам просто потрібно змінити це для свого облікового запису користувача.

Дайте пароль як андроїд

. Якщо він не запитує пароль, ваш шлях до магазину невірний.

Якщо все працює нормально, він повинен дати вам хешкей нижче.

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


Я отримую це: помилка keytool: java.io.IOException: Keystore було підроблено, або пароль був неправильним. Як я можу знайти свій правильний пароль?
DuyguK

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

Боже, це зайняло у мене години. Дуже дякую!
1313

Хочу запитати, чи новий метод (отримати ключі за кодом) якось уповільнює процес onCreate. Тому що від того, що я знаю, коли створений підписаний APK, клавіші відрізняються. Дякуємо за код все
одно

чи буде простіший метод працювати без емулятора, але на реальному пристрої Android?

24

Найпростіший спосіб генерування хеш-ключа.

Вимога: ключ SHA1

Ви можете отримати ключ SHA1 з файлу магазину ключів двома способами

1) Знайдіть файл зберігання ключів, відкрийте командний рядок у цьому місці, а потім використовуйте нижче вказану команду

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

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

АБО

2) Запустивши підписReport

Дивіться нижче зображення.

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

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

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

Після отримання потрібного ключа SHA1

Тоді йти

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

і вставте ключ sha1

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

і нарешті ви отримаєте Необхідний HashKey, який ви можете використовувати його, щоб застосувати його у facebook.


2
Ця відповідь набагато простіша за інші, оскільки вона стосується лише остаточного результату. Завжди правильно. В інших випадках, якщо процес підписання неправильно налаштовано, ми не знатимемо, як це виправити.
hakuna1811

1
Дивовижна робота на кшталт чарівності Дякую
Dheeraj Jaiswal

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 для налагодження та режиму випуску за допомогою цього. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

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 (натисніть клавішу Enter)

  5. (натисніть) cd C: \ Program Files \ Java \ jdk1.6.0_45 \ bin. Примітка: C: \ програмні файли \ Java \ jdk1.6.0_45 \ bin: це шлях до папки jdk на вашому комп'ютері

  6. (натисніть) keytool -exportcert -alias gci -keystore D: \ папка \ keystorerelease | C: \ openssl \ bin \ openssl sha1 -binary | C: \ openssl \ bin \ openssl base64. Примітка: D: \ папка \ keystorerelease: це шлях до вашого виходу з клавіш

  7. Введіть пароль зберігання клавіш: Це пароль, коли ваш реєстр зберігає ключ.

    Тоді у вас буде хеш-ключ: jDehABCDIQEDWAYz5Ow4sjsxLSw =

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


Створіть HashKey для налагодження та режиму випуску за допомогою цього. stackoverflow.com/questions/7506392/…
Naeem Ibrahim

9

ПРОСТО РОЗВ'ЯЗАННЯ З ЦЬОЇ ПРОБЛЕМИ:

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

КРОК 1:

Встановіть на свій телефон facebook sdk, який ви завантажили зі сторінки розробника facebook. Не встановлюйте звичайний додаток facebook. Переконайтеся, що ви можете увійти у facebook. Потім вийдіть із системи.

КРОК 2:

Експортуйте додаток за допомогою останнього ключа випуску як apk, як ви хочете, коли ви завантажуєте його в playstore.

КРОК 3:

Покладіть файл Apk на свій телефон за допомогою кабелю usb або usb stick.

КРОК 4:

Встановіть свою програму за допомогою менеджера файлів: Приклад

КРОК 5:

Запустіть додаток і спробуйте увійти через facebook. Відкриється діалогове вікно, яке скаже вам: "ключ YOURHASHKEY не знайдено в консолі розробника facebook"

КРОК 6:

Запишіть ключ.

КРОК 7:

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

Насолоджуйтесь


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

7

Якщо ви випускаєте, використовуйте сховище ключів, за допомогою якого ви експортували ваш додаток, а не debug.keystore.


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


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
  5. Прокоментуйте два рядки, щоб ваш код знаку був встановлений на TextView 6 Wuolia, у вас є ваш HASH, встановіть додаток на свій телефон !!! і перевірте свій хеш-ключ!
  6. Тепер, коли це видно, перейдіть до створеного вами додатку facebook та додайте його до [Key Hashes]
  7. Зауважте, що назва вашого пакета має бути таким же, як у facebook [Назва пакета] в розділі [Ключові хеші]
  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 Drive.

4) Скопіюйте файл Файл debug.keystore з папки .android у моєму випадку (C: \ Users \ SYSTEM.android) та вставте в папку JDK bin Folder у моєму випадку (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: \ Проекти \ MyAppFolder \ keystore.txt | C: \ openssl \ bin \ openssl sha1 - двійковий | C: \ openssl \ bin \ openssl base64 ex - keytool -exportcert -alias (ваше ім'я псевдоніму apk псевдоніму введіть сюди, як мій знак apk alian name abcd) -keystore "підписаний apk згенерований keystore apth введіть тут" | msgstr "введіть сюди шлях папки до відкритої скриньки" sha1 - двійковий | "відкрити шлях папки бін введіть сюди" base64

7) Тепер вам потрібно ввести пароль, Пароль = (сюди введіть свій пароль зберігання підписів)

8) у вас є сховище ключів, яке використовується для випуску хеша ключа ключа програми


3

Незважаючи на те, що ця тема давня, я все ж хотів би поділитися своїм досвідом (нещодавно почав працювати з facebook), який мені здається прямим:

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

    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 -кладинка YOUR_RELEASE_KEY_PATH | "PATH FOR openssl.exe" sha1 -двійний | openssl base64


але він показує запит пароля, я також даю підписаний пароль для зберігання брелоків, а потім показує китайський запуск
Харша,

переконайтесь, що шлях правильно встановлено для 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 SSO має бути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();
}

** Зателефонуйте funcation getAppKeyHash () з вашого oncreate methode, якщо ви хочете підписаний хеш, то зробіть підписану збірку встановити підписану збірку та запустіть, ви отримаєте хеш-ключ у діалоговому вікні, а потім просто відзначте його та оновіть його на рахунку facebook dev і прокоментуйте цю функцію та зробіть іншу підписано 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.