启用谷歌应用程序签名后,生成的11个字符的哈希代码不起作用



我正在尝试实现Sms Retriever,用于在没有任何Sms权限的情况下从用户移动设备获取otp。

最初,我使用密钥库(.jks)生成了一个散列密钥此处所述的关键工具

当我用这个密钥库签署apk并用这个散列密钥接收到SMS时,它工作正常。

但在将应用程序上传到谷歌play商店后,短信接收器不工作。我们已经启用了谷歌应用程序签名来签名该应用程序。我发现谷歌将删除上传的签名,这是使用谷歌应用程序签名的应用程序的密钥,如这里所述。因此,我试图将谷歌应用程序签名证书添加到上传的密钥库中,并使用别名创建新的哈希密钥。但我无法将应用程序签名证书添加到具有别名的密钥库中。

有什么建议可以为短信检索器生成带有应用程序签名证书的哈希密钥吗?

当谷歌的应用程序签名启用时,将在没有别名的情况下生成11个字符的哈希

即SMS检索API

以下命令从应用程序的生产密钥库:

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

在上面的命令中,散列是基于MyAndroidKey别名(-alias MyAndroidKey)生成的。

尝试为Google APK Sign Enabled 生成没有别名的哈希

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

由于Play应用程序也在对应用程序进行签名,因此我们必须生成一个.jks文件,并且我们必须使用deployement_cert.der(从Google Play控制台下载)生成的这个.jks文件来获取11个字符的哈希代码。遵循以下步骤:

生成11个字符的散列代码需要.jks文件

创建.jks文件

  1. 从谷歌播放控制台下载.der文件。

    https://i.stack.imgur.com/KUK6i.png

  2. 要从下载的证书(deployment_cert.der)创建.jks文件,请使用以下命令:

密钥工具-导入证书-别名YOUR_alias-文件deployment_cert.der-密钥库app_keystore.jks-storepass YOUR_keystore_PWD

It will generate a app_keystore.jks file.

3.然后使用生成的密钥库生成11个字符的哈希代码。

keytool-exportcert-alias YOUR_alias-keystoreapp_keystore.jks|xxd-p|tr-d"[:space:]"|echo-n COM.EXAMPLE.MYAPPcat|sha256sum|tr-d"[:空格:]-"|xxd-r-p |base64|剪切-c1-11

这个在GitHub中创建的问题,以及androidcredentialsrepo的各种评论,听起来很有希望解决这个问题。

这是用户评论的链接。我自己还没有尝试过,但在尝试了本评论上方和下方的所有解决方案后,发现它们都不适合我,我认为这是最后一个选项,因为它使用AppSignatureHelper类生成哈希,所以它创建了一个动态哈希,不同于调试、发布和PlayStore构建

我到现在还没能尝试的原因是PlayStore版本上线需要很长时间。

它已经几个小时了,更新到现在还没有上线。你自己试一下,告诉我它是否有效。我也会在尝试这个解决方案后尽快更新答案。

最后,我找到了SMS检索器api的解决方案,该api在使用以下脚本的版本构建中不会自动从SMS读取OTP。

下载此文件https://github.com/michalbrz/sms-retriever-hash-generator/blob/master/google_play_sign.rb

在脚本中更改此代码

--软件包名称您的应用程序软件包,例如com.test.app

--谷歌播放密钥key_PATH谷歌播放公钥(DER格式)用于签署发布应用

--密钥库keystore_PATH密钥库(.jks文件)的路径

--密钥库密码password密钥库的密码-只有当选项"时才需要--密钥库";指定为

--密钥别名key_alias密钥库中密钥的别名-仅当选项"--密钥库";指定为

然后在命令下运行

ruby google_play_sign.rb--包com.your.app--谷歌播放密钥部署证书.der

最新更新