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以进行交付的密钥的证书,请执行以下操作:
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
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来自我知道我已经回答了