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
это работает нормально для меня. попробовать еще раз.