如何使用Google App签名为Sms Retriever生成11个字符哈希密钥

Far*_*qui 28 command-line android keytool google-play

我使用AppSignatureHelper该类生成了11个字符哈希.但是在将apk上传到Play商店后,他们的哈希不再起作用了.我发现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从JDK的bin文件夹中替换了它的路径,但后来它说不xxd被识别所以我从网站上下载它现在说它tr不被识别,我想它也会说cut也是如此.

请原谅我,如果它似乎太过于问我了,但我怎么解决这个问题呢?

更新:我在linux机器上尝试了上面的第二个命令,该命令工作并给了我11个字符哈希,但仍然没有SMS Retriever工作.

解决方案:在Nick Fortescue的回答的帮助下,我下载了DER格式的文件.然后使用以下命令将其转换为.jks文件,

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

然后在certificate.jks上执行了上面的第一个命令,它工作了!

Man*_*ddy 15

这是完整的分步指南。

  1. 转到播放控制台->打开应用->版本管理->应用签名->下载证书。就像下面的屏幕截图一样

在此处输入图片说明

这会给你deployment_cert.der文件

  1. deployment_cert.der文件转换为.jks文件

使用以下命令

keytool -importcert -alias YOUR_ALIAS -file deployment_cert.der -keystore certificate.jks -storepass YOUR_PASSWORD
Run Code Online (Sandbox Code Playgroud)

将您的密钥库中使用的YOUR_ALIAS,YOUR_PASSWORD替换为您的密钥。deployment_cert.der如果需要,请使用完整的路径代替

输入此命令后,它将询问

信任此证书吗?[否]:是

输入yes并单击enter。它将显示消息

证书已添加到密钥库

这将生成一个新文件 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替换为用于keystore,project的您的。certificate.jks如果需要,请使用完整的路径代替

它将要求输入密码

输入密钥库密码:mypassword

输入密码,您将获得哈希。

编辑对于MacOS用户:

如果您使用的是MacOS,则可以通过安装coreutils来安装sha256sum,如下所示:

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

学分阿比纳夫·古普塔和这个问题的运算法尔汉Farooqui以上从答案尼克福蒂斯丘

  • 对我来说,在 mac 中输入密码后不会生成哈希字符串 (5认同)
  • 对于 mac,如果 <echo -n YOUR_PACKAGE `cat` > 不起作用,请将其替换为 <xargs echo -n YOUR_PACKAGE> (4认同)
  • 完美的解决方案!谢谢。我必须阅读一堆应用程序的签名过程才能理解。 (2认同)
  • 我按照所有步骤操作并获得了哈希密钥。我将哈希密钥添加到我的短信中。但它仍然无法在 Play 商店 apk 上运行。 (2认同)

mic*_*brz 9

由于默认的 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
Run Code Online (Sandbox Code Playgroud)

哪里deployment_key.der是从 Google Play 下载的证书,如Nick's response

在幕后,它将 Google Play 证书转换为密钥库,并且基本上执行其他建议的 bash 命令所做的工作,但将其包装为更易于使用的内容。


Nic*_*cue 8

Google Play App Signing的帮助文档中,它有一个"新应用"部分.本节的第4步是:

第4步:向API提供商注册您的应用程序签名密钥如果您的应用程序使用任何API,您通常需要注册Google密钥的证书,以便为您的应用程序进行身份验证.这通常通过证书的指纹来完成.

要查找Google用于重新签名APK以进行投放的密钥证书:

  1. 登录您的Play控制台.
    1. 选择一个应用程序
    2. 在左侧菜单中,单击版本管理>应用程序签名.
    3. 在此页面中,您可以复制应用程序签名证书的最常见指纹(MD5,SHA-1和SHA-256).如果API提供程序需要不同类型的指纹,您还可以下载DER格式的原始证书,并通过API提供程序所需的转换工具运行它.

以DER格式下载原始证书,然后在该证书上使用您的命令.


0ca*_*ase 6

这些步骤在 Mac 上对我有用:

\n
    \n
  1. 上传构建(不需要功能)并至少发布到内部测试轨道。

    \n
  2. \n
  3. 从 Google Play 控制台下载应用签名证书(设置(左侧边栏导航)> 应用完整性 > 应用签名):\n在此输入图像描述

    \n
  4. \n
  5. 转到下载文件夹并运行以下命令:

    \n
  6. \n
\n
cd ~/Downloads\n
Run Code Online (Sandbox Code Playgroud)\n
\xe2\x9e\x9c keytool -importcert -alias my-upload-key-alias -file deployment_cert.der -keystore certificate.jks -storepass notARealPassword\n\n...\n\nTrust this certificate? [no]:  yes\nCertificate was added to keystore\n
Run Code Online (Sandbox Code Playgroud)\n
\xe2\x9e\x9c keytool -exportcert -alias my-upload-key-alias -keystore certificate.jks | xxd -p | tr -d "[:space:]" | xargs echo -n com.myapp | shasum -a 256 | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11\nEnter keystore password: notARealPassword\n6bAhwera2r5\n
Run Code Online (Sandbox Code Playgroud)\n

6bAhwera2r5是您的 11 个字符的哈希密钥,可用于 SMS 检索器功能。

\n
    \n
  1. 将哈希值附加到想要自动检测的短信末尾以及要由 android 传递给您的应用程序的内容。示例模板:
  2. \n
\n
<#> Dear customer, {#var#} is your one time password for AppName account verification. 6bAhwera2r5\n
Run Code Online (Sandbox Code Playgroud)\n

该模板符合印度 DLT 规则。

\n