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

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

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

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

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

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

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

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

согласно предложению от @Shreyash-Машру, я использовал следующий код, чтобы получить 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 long key hash вместо 28...

4 ответов


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


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

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

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

или

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

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

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


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

keytool-exportcert-псевдоним androiddebugkey-хранилище ключей "C:\Users\USERNAME.android\debug.keystore " | "C:\OpenSSL\bin\openssl" в SHA1 -двоичный |"C:\OpenSSL\bin\openssl" в base64


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

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