it-roy-ru.com

Как сгенерировать ключ из 11 символов для Sms Retriever с подписью Google App

Я сгенерировал хэш 11 символов, используя класс AppSignatureHelper. Но после загрузки apk в Play Store, они больше не работают. И я обнаружил, что Play заменяет ключ на другой, поэтому хэш также меняется. Теперь у меня проблемы с получением ключа хеша 11 символов.

Я не знаю, как использовать команды, данные 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 на его путь из папки bin JDK, но тогда он говорил, что xxd не распознан, поэтому я скачал его с веб-сайта, и теперь он говорит, что tr не распознан, я думаю, он скажет, что и для cut

Прошу прощения, если мне кажется, что это слишком глупо, но как я могу решить эту проблему?

UPDATE: Я попробовал вторую команду сверху на компьютере с Linux, команда сработала и дала мне 11-значный хэш, но ретривер SMS все еще не работает. 

РЕШЕНИЕ: С помощью ответа Ника Фортескью я скачал файл в формате DER. Затем преобразовал его в файл .jks с помощью следующей команды:

keytool -importcert -alias myalias -file deployment_cert.der -keystore certificate.jks -storepass mypassword

Затем выполнил первую команду сверху на certificate.jks и все заработало!

17
Farhan Farooqui

В справочные документы для подписи приложения Google Play есть раздел «Новые приложения». Шаг 4 в этом разделе: 

Шаг 4. Зарегистрируйте ключ подписи приложения у провайдеров API Если ваше приложение использует какой-либо API, вам обычно нужно зарегистрировать сертификат ключа, которым Google подписывает ваше приложение для целей аутентификации. Обычно это делается с помощью отпечатка пальца сертификата.

Чтобы найти сертификат ключа, который Google использует для повторной подписи вашего APK для доставки:

  1. Войдите в свою игровую консоль .
    1. Выберите приложение.
    2. В левом меню выберите Управление выпуском> Подписание приложения.
    3. На этой странице вы можете скопировать наиболее распространенные отпечатки пальцев (MD5, SHA-1 и SHA-256) сертификата подписи вашего приложения. Если провайдеру API требуется другой тип отпечатка пальца, вы также можете загрузить исходный сертификат в формате DER и запустить его с помощью инструментов преобразования, которые требуются провайдеру API.

Загрузите оригинальный сертификат в формате DER, а затем используйте свою команду в этом сертификате.

7
Nick Fortescue

Я обнаружил, что все эти команды и сам процесс немного запутаны (у меня также есть проекты с 4 средами с 4 различными пакетами), поэтому я включил хэш в полезную нагрузку от клиента, когда клиент запрашивает OTP, затем сервер сохранил его (доверие при первом использовании) для проверки вручную в системе управления контентом . Не нашел какого-либо аспекта безопасности при использовании этого метода

0
Noam a

Поскольку команды 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, но оборачивает его во что-то более простое в использовании.

0
michalbrz

попробуй это 

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, если он установлен в другой каталог

0
MJahongir