Как создать 11-х хэш-хэш-ключ для Sms Retriever с подпиской на Google App
Я создал хэш 11 символов, используя класс AppSignatureHelper
. Но после загрузки apk для воспроизведения в магазине, хэш не работает больше. И я узнал, что Play заменяет ключ другим, поэтому хэш также изменяется. Теперь у меня возникли проблемы с получением хэш-ключа 11 char.
Я не знаю, как использовать команды, данные Google. Я нашел эту команду здесь
keytool -exportcert -alias MyAndroidKey -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp 'cat' | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
Поскольку для моего приложения включена подписка на Play App, мне придется использовать эту команду,
keytool -exportcert -keystore MyProductionKeys.keystore | xxd -p | tr -d "[:space:]" | echo -n com.example.myapp 'cat' | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
Я заменил keytool
своим путем из папки JDK bin, но потом он сказал, что xxd
не был распознан, поэтому я загрузил его с веб-сайта, теперь он говорит, что tr
не распознается, я думаю, он скажет, что и для cut
.
Пожалуйста, простите меня, если мне кажется, что я ничего не спрашиваю, но как я могу это разрешить?
UPDATE: я пробовал вторую команду сверху на машине linux, команда работала и давала мне 11-символьный хеш, но все же ретривер SMS не работает.
РЕШЕНИЕ: С помощью ответа Ник Фортескью я загрузил форматированный файл DER. Затем преобразовали его в файл.jks, используя следующую команду:
keytool -importcert -alias myalias -file deployment_cert.der -keystore certificate.jks -storepass mypassword
Затем выполнил первую команду сверху на cert.jks, и она сработала!
Ответы
Ответ 1
Вот полное пошаговое руководство.
- Зайдите в игровую приставку → откройте приложение → Управление выпуском → Подписание приложения → Загрузить сертификат. Как на скриншоте ниже
Это даст вам файл deployment_cert.der
- Преобразование
deployment_cert.der
файл в .jks
файл
используйте команду ниже
keytool -importcert -alias YOUR_ALIAS -file deployment_cert.der -keystore certificate.jks -storepass YOUR_PASSWORD
Замените YOUR_ALIAS, YOUR_PASSWORD на ваш, который использовался в хранилище ключей. Вместо deployment_cert.der
используйте полный путь, если требуется
После ввода этой команды она спросит
Доверять этому сертификату? [нет да
введите да и нажмите ввод. Это покажет сообщение
Сертификат был добавлен в хранилище ключей
Это создаст новый файл certificate.jks
-
Теперь в терминале введите команду
keytool -exportcert -alias YOUR_ALIAS -keystore certificate.jks | xxd -p | tr -d "[:space:]" | echo -n YOUR_PACKAGE 'cat' | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
Замените YOUR_ALIAS, YOUR_PACKAGE на ваш, который использовался в хранилище ключей, проекте. Вместо certificate.jks
используйте полный путь, если требуется
это попросит пароль
Введите пароль хранилища ключей: mypassword
введите свой пароль, и вы получите хэш.
РЕДАКТИРОВАТЬ Для пользователей MacOS:
Если вы используете MacOS, вы можете установить sha256sum, установив coreutils следующим образом:
brew install coreutils
Или вы можете использовать shasum -a 256
вместо sha256sum
следующим образом:
keytool -exportcert -alias YOUR_ALIAS -keystore certificate.jks | xxd -p | tr -d "[:space:]" | echo -n YOUR_PACKAGE 'cat' | shasum -a 256 | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11
Авторы Абхинав Гупта и Op этого вопроса Фархан Фаруки и выше ответ от Ника Фортескью
Ответ 2
В справочной документации по подписке приложения Google Play есть раздел "Новые приложения". Шаг 4 в этом разделе:
Шаг 4. Зарегистрируйте ключ подписи вашего приложения у провайдеров API. Если ваше приложение использует какой-либо API, вам обычно нужно зарегистрировать сертификат ключа, с которым Google подписывает ваше приложение в целях аутентификации. Обычно это делается с помощью отпечатка пальца сертификата.
Чтобы найти сертификат ключа, который Google использует для повторной подписи вашего APK для доставки:
- Войдите в свою игровую консоль.
- Выберите приложение.
- В левом меню выберите Управление выпуском> Подписание приложения.
- На этой странице вы можете скопировать наиболее распространенные отпечатки пальцев (MD5, SHA-1 и SHA-256) сертификата подписи вашего приложения. Если провайдеру API требуется другой тип отпечатка пальца, вы также можете загрузить исходный сертификат в формате DER и запустить его с помощью инструментов преобразования, которые требуются провайдеру API.
Загрузите исходный сертификат в формате DER, а затем используйте свою команду в этом сертификате.
Ответ 3
Поскольку команды bash по умолчанию у меня не работали, и мне нужно было сгенерировать хэши как для локального хранилища ключей, так и для сертификата Google Play, я написал для этого свой собственный скрипт на Ruby: https://github.com/michalbrz/sms-retriever-hash-generator/blob/master/google_play_sign.rb
Тогда создание хэша с подписью в Google Play просто:
ruby google_play_sign.rb --package com.your.app --google-play-key deployment_key.der
где deployment_key.der
- сертификат, загруженный из Google Play, как в ответе Ника.
Под капотом он превращает сертификат Google Play в хранилище ключей и в основном делает то, что делают другие предложенные команды bash, но оборачивает его во что-то более простое в использовании.
Ответ 4
попробуй это
C:\Program Files\Java\jdk1.8.0_25\bin> keytool -exportcert -alias *Alias -keystore *keystorePath | C:\OpenSSL\bin\openssl.exe sha1 -binary | C:\OpenSSL\bin\openssl.exe base64
замените * Alias своим псевдонимом, а * keystorePath - вашим местоположением в хранилище. Также укажите правильный путь к openssl.exe, если он установлен в другой каталог
Ответ 5
Я обнаружил, что все эти команды и сам процесс немного запутаны (у меня также есть проекты с 4 средами с 4 различными пакетами), поэтому я включил хэш в полезную нагрузку от клиента, когда клиент запрашивает OTP, затем сервер сохранит его (доверие при первом использовании) для ручного просмотра в системе управления контентом. Не нашел ни одного аспекта безопасности, используя этот метод