Как создать 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

Вот полное пошаговое руководство.

  1. Зайдите в игровую приставку → откройте приложение → Управление выпуском → Подписание приложения → Загрузить сертификат. Как на скриншоте ниже

enter image description here

Это даст вам файл deployment_cert.der

  1. Преобразование 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

  1. Теперь в терминале введите команду

    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 для доставки:

  1. Войдите в свою игровую консоль.
    1. Выберите приложение.
    2. В левом меню выберите Управление выпуском> Подписание приложения.
    3. На этой странице вы можете скопировать наиболее распространенные отпечатки пальцев (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, затем сервер сохранит его (доверие при первом использовании) для ручного просмотра в системе управления контентом. Не нашел ни одного аспекта безопасности, используя этот метод