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 ответа:
Столкнулся с этой проблемой тоже, для меня я использовал 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