启用Google应用签名后,Sms Retriever的11位哈希码失效求助
解决Google Play应用签名后SMS Retriever哈希密钥失效的问题
我完全懂你遇到的坑——启用Google应用签名后,之前用自己keystore生成的哈希直接失效了,毕竟Google会替换成它的官方签名密钥来签发给用户的最终APK。下面是具体的解决步骤,根本不需要合并keystore,直接用Google提供的应用签名证书生成正确的哈希就行:
步骤1:从Google Play控制台获取应用签名证书
- 打开Google Play控制台,找到你的目标应用
- 进入发布 > 设置 > 应用签名页面
- 在「应用签名证书」区域,点击下载DER格式的证书文件(PEM格式也可以,后续步骤兼容两种)
步骤2:生成SMS Retriever所需的哈希密钥
这里给你两种简单的实现方法,选顺手的来就行:
方法一:用OpenSSL命令行(推荐)
如果你的电脑装了OpenSSL,直接执行以下命令:
- (如果下载的是DER证书)先转成PEM格式:
openssl x509 -inform der -in downloaded_certificate.der -out certificate.pem - 提取证书里的公钥:
openssl x509 -pubkey -noout -in certificate.pem > public_key.pem - 计算SHA-256哈希并转Base64编码:
openssl dgst -sha256 -binary public_key.pem | openssl base64 - 取输出结果的前11个字符,这就是你要的哈希密钥。比如输出是
abcdefghijklmnop,取前11位abcdefghijk
方法二:用Keytool结合在线工具
不想折腾OpenSSL的话,可以这么操作:
- 用keytool打印证书的SHA256指纹:
keytool -printcert -file downloaded_certificate.der - 在输出里找到
SHA256:开头的行,复制后面的十六进制字符串(把所有冒号删掉,比如AA:BB:CC改成AABBCC) - 把这个十六进制字符串转成Base64编码(随便找个靠谱的在线十六进制转Base64工具就行)
- 同样取Base64结果的前11个字符,就是目标哈希
步骤3:验证和测试
- 一定要确保短信模板包含这个哈希,格式必须是:
Your OTP is 123456. {哈希密钥}(注意哈希前面有空格,大括号不能省略) - 测试别用本地签名的APK,建议从Google Play控制台的内部测试轨道下载签名后的APK安装,这样才能匹配Google的签名哈希
常见误区提醒
- 完全没必要把Google的证书添加到你自己的keystore里,纯属多此一举,直接用下载的证书生成哈希就够了
- 别搞混上传密钥和应用签名密钥:上传密钥是你用来签APK上传到Play的,应用签名密钥才是Google用来签用户最终安装包的,后者才是生成哈希的核心依据
内容的提问来源于stack exchange,提问作者Ajay Jayendran




