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

问题描述 投票:23回答:5

我使用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 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

我已经用JDK的bin文件夹中的路径替换了keytool,但后来却说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上执行了上面的第一个命令,它工作了!

android command-line google-play keytool
5个回答
8
投票

这是完整的分步指南。

  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替换为在keystore,project中使用的你的。如果需要,使用完整路径代替certificate.jks

它会要求输入密码

输入密钥库密码:mypassword

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

编辑对于MacOS用户:

如果您使用的是MacOS,可以通过安装如下的coreutil来安装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


8
投票

the help documents for Google Play App Signing,它有一个“新应用”部分。本节的第4步是:

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

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

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

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


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.der是从Google Play下载的证书,如Nick's response

它将Google Play证书转换为密钥库,并基本上执行其他建议的bash命令,但将其包含在更易于使用的内容中。


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

用你的别名替换*别名,用你的kestore位置替换* keystorePath。如果将openssl.exe安装到另一个目录,也将其放入正确的路径


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.