Keytool генерирует хэш ключа длиной 32 символа вместо 28


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

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

Как сказано в Facebook developers 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 символа вместо 28...

4 14

4 ответа:

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

Надеюсь, что этот ответ не слишком запоздал (я знаю, что вопрос старше года, но я прибыл сюда из первого результата поиска google по этому вопросу).

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

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

Или

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

btoa(atob(hashString).slice(0, -2))

Где "hashString" - это ваш 32-символьный хэш.

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

Keytool-exportcert-псевдоним androiddebugkey-хранилище ключей "C:\Users\USERNAME.\отладки Android.хранилище ключей" | "C:\OpenSSL\bin\openssl" sha1-бинарный |"C:\OpenSSL\bin\openssl" base64

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

Это прекрасно работает для меня. попробовать еще раз.