Подтвердить что ты не робот

Keytool генерирует 32-символьный длинный хэш вместо 28

Я использую следующую команду для генерации ключевого хэша для консоли Facebook для Android

.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64

Как сказано в Facebook разработчикам SDK help

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

Версия Java: jdk1.8.0_31 ОС: Windows 7

Генерация для android.

ИЗМЕНИТЬ

В соответствии с предложением от @Shreyash-mashru я использовал следующий код, чтобы получить keyhash

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "my.package.name",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {
        Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());

    } catch (NoSuchAlgorithmException e) {
        Log.e("KeyHash:", "++++++++++++++++++++++++++++++++++++++" + e.toString());
    }

Однако, если кто-то еще может помочь мне понять, почему инструмент командной строки генерирует 32 char хэша с длинными ключами вместо 28...

4b9b3361

Ответ 1

Пришел и к этой проблеме, для меня я использовал windows powershell и продолжал генерировать 32-символьный ключ. Когда я переключаюсь на простой старый cmd, он работал, как ожидалось.

Ответ 2

Сгенерированный хеш составляет 32 символа, потому что есть возврат каретки и новая строка, добавленная в конец. Чтобы это исправить, вы можете:

Удалите последние 5 символов хеша и добавьте "=" в конец. Например: "1234567890abcdefghijklmnopqrstuv" (32 символа) → "1234567890abcdefghijklmnopq=" (28 символов)

Или же:

откройте консоль javascript и используйте:

btoa(atob("your hash string").slice(0, -2))

Где "your hash string" - это ваш хэш из 32 символов.

Ответ 3

У меня была такая же проблема. Это как-то связано с использованием моей существующей версии openSSL (64 бит). Я загрузил 32-битную версию отсюда и установил ее в c:\openSSL. Затем команда указывает на эту версию SSL, и я получил хэш 28-х символов.

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

Ответ 4

ПОПРОБУЙТЕ КОМАНДУ В КОМАНДУ ПОДСКАЖИТЕ!

он спросит у вас пароль, затем вы получите хеш-ключ

Попытка использовать ту же команду на powershell не дает правильного ключа хеша.

Ответ 5

.\keytool.exe -exportcert -alias app_android -keystore release.keystore | openssl sha1 -binary | openssl base64

это отлично работает для меня. повторите попытку.