如何使用Google App签名为Sms检索器生成11个字符的哈希键

时间:2018-07-16 15:54:12

标签: android command-line google-play keytool

我已经使用AppSignatureHelper类生成了11个字符的哈希。但是在将apk上传到Play商店后,它们的哈希不再起作用。而且我发现Play用另一个替换了密钥,这就是为什么哈希值也被更改的原因。现在,我在获取11个字符的哈希键时遇到了麻烦。

我不知道如何使用Google提供的命令。我从here

找到了此命令

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应用签名,因此我将不得不使用此命令

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

我已经用JDK的bin文件夹中的路径替换了keytool,但是它说xxd未被识别,所以我从网站下载了它,现在却说tr未被识别认识到,我想对于cut也是如此。

如果我问的太白痴,请原谅我,但是我该如何解决呢?

更新:我已经在Linux机器上尝试了上面的第二个命令,该命令有效,并给了我11个字符的哈希值,但SMS检索程序仍然无法正常工作。

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

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

然后从上方对certificate.jks执行了第一个命令,它就起作用了!

6 个答案:

答案 0 :(得分:8)

enter image description here中,有一个“新应用”部分。本部分的第4步是:

  

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

     

要查找Google用于重新签名APK以便交付的密钥证书:

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

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

答案 1 :(得分:6)

这是完整的分步指南。

  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

输入此命令后,它将询问

  

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

输入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替换为密钥库,项目中使用的您的。如果需要,请使用完整路径代替 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

获得Abhinav Gupta以及该问题Farhan Farooqui的操作以及上述Nick Fortescue的答案

答案 2 :(得分:1)

由于默认的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.derNick's response中从Google Play下载的证书。

在后台,它将Google Play证书转换为密钥库,基本上可以执行其他建议的bash命令所执行的操作,但是将其包装在易于使用的内容中。

答案 3 :(得分:0)

尝试

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,并用kestore位置替换* keystorePath。如果已将openssl.exe安装到另一个目录,也请输入正确的路径

答案 4 :(得分:0)

我发现所有这些命令和过程本身都有些混乱(我也有在4个环境中使用4个不同程序包的项目),所以我要做的就是在客户端请求OTP,然后服务器将其保存(信任首次使用),以便在内容管理系统上进行手动检查。 使用此方法未找到任何安全方面

答案 5 :(得分:0)

我知道我回答得很晚。但是我找到了解决方案。

首先按照上述Manoher Reddy的步骤进行操作。

如果这不起作用,请尝试以下替代解决方案,它在各种应用中都对我有用:

提供Play商店生成的哈希到后端。为了在Playstore上生成哈希密钥,我使用了AppSignatureHelper类,并为生成的哈希密钥添加Toast并将此版本上传到Play商店。成功推出后,我已经下载了构建。现在,Toast将显示Playstore生成的哈希键,并将其提供给后端。对我来说很好。