Android 如何使用谷歌应用程序签名为短信检索器生成11个字符的哈希键

Android 如何使用谷歌应用程序签名为短信检索器生成11个字符的哈希键,android,command-line,google-play,keytool,Android,Command Line,Google Play,Keytool,我使用AppSignatureHelper类生成了11个字符的散列。但在将apk上传到play store后,它们的哈希不再起作用。我发现Play用另一个键替换了这个键,这就是散列也被更改的原因。现在我在获取11个字符的哈希键时遇到了问题 我不知道如何使用谷歌给出的命令。我从中找到了这个命令 keytool-exportcert-alias MyAndroidKey-keystore MyProductionKeys.keystore | xxd-p | tr-d“[:space:]”| ech

我使用
AppSignatureHelper
类生成了11个字符的散列。但在将apk上传到play store后,它们的哈希不再起作用。我发现Play用另一个键替换了这个键,这就是散列也被更改的原因。现在我在获取11个字符的哈希键时遇到了问题

我不知道如何使用谷歌给出的命令。我从中找到了这个命令


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

由于已为我的应用程序启用播放应用程序签名,因此我必须使用此命令

keytool-exportcert-keystoremyProductionKeys.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\u cert.der-keystore certificate.jks-storepass mypassword

然后在certificate.jks上执行上面的第一个命令,它成功了

其中有一节“新应用程序”。本节中的第4步是:

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

要查找Google用于重新签署APK以进行交付的密钥的证书,请执行以下操作:

  • 登录到您的游戏机。
  • 选择一个应用程序
  • 在左侧菜单上,单击发布管理>应用程序签名
  • 从该页面,您可以复制应用程序签名证书的最常见指纹(MD5、SHA-1和SHA-256)。如果API提供程序需要不同类型的指纹,还可以下载DER格式的原始证书,并通过API提供程序所需的转换工具运行它
  • 下载DER格式的原始证书,然后在该证书上使用您的命令。

    试试这个

    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替换为您的kestore位置。另外,如果openssl.exe安装到另一个目录

    ,那么请设置openssl.exe的正确路径,因为默认的bash命令对我不起作用,我需要为本地密钥库和Google Play证书生成哈希,为此我编写了自己的Ruby脚本:

    然后,使用Google Play签名生成哈希值就是:

    ruby google_play_sign.rb --package com.your.app --google-play-key deployment_key.der
    
    其中
    deployment\u key.der
    是从Google Play下载的证书,如中所示


    在引擎盖下,它将Google Play cert转换为密钥库,基本上做了其他建议的bash命令所做的事情,但将其封装在更易于使用的东西中。

    我发现所有这些命令和过程本身都有点混乱(我也有4个环境和4个不同包的项目),因此,我所做的是,当客户端请求OTP时,在客户端的有效负载上包含哈希,然后服务器保存它(首次使用时信任),以便在内容管理系统上进行手动审查。
    没有找到使用此方法的任何安全方面

    这是完整的分步指南

  • 进入游戏控制台->打开应用->发布管理->应用签名->下载证书。就像下面的屏幕截图
  • 这将为您提供
    部署证书.der
    文件

  • 部署证书.der
    文件转换为
    .jks
    文件
  • 使用下面的命令

    keytool -importcert -alias YOUR_ALIAS -file deployment_cert.der -keystore certificate.jks -storepass YOUR_PASSWORD
    
    用密钥库中使用的密码替换您的\u别名和密码。如果需要,请使用完整路径代替部署证书顺序

    输入此命令后,它将询问

    信任这个证书吗?[否]:是的

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

    证书已添加到密钥库

    这将生成一个新文件
    certificate.jks

  • 现在在终端输入命令


    keytool-exportcert-alias YOUR|u alias-keystore certificate.jks | xxd-p | tr-d“[:space:”| echo-n您的|u包'cat`| sha256sum | tr-d”[:space:“| xxd-r-p | base64 | cut-c1-11

  • 将您的_别名、_包替换为您在密钥库、项目中使用的。如果需要,请使用完整路径代替证书.jks

    它将询问密码

    输入密钥库密码:mypassword

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

    为MacOS用户编辑: 如果您正在使用MacOS,可以通过如下方式安装coreutils来安装sha256sum:

    brew安装coreutils

    或者您可以使用
    shasum-a 256
    代替
    sha256sum
    如下:


    keytool-exportcert-alias YOUR|u alias-keystore certificate.jks | xxd-p | tr-d“[:space:”| echo-n您的|u包'cat`| shasum-a 256 | tr-d”[:space:“| xxd-r-p | base64 | cut-c1-11

    这个问题和以上答案的积分和Op来自

    我知道我已经回答了