Android自动读取OTP短信时后端如何验证哈希码?
后端验证OTP短信哈希码合法性的方案
可以在后端验证短信中哈希码的合法性,核心思路是在后端复现App端生成哈希码的逻辑,对比短信中的哈希码是否与后端生成的合法哈希码一致,具体步骤如下:
1. 准备必要的基础数据
首先需要获取应用的两个核心信息:
- 应用的包名(比如
com.example.app) - 应用签名证书的SHA-256哈希值(去掉冒号的纯字符串形式,比如
ABC123DEF456...)- 可通过Android Studio的签名报告获取,或使用
keytool命令生成:keytool -list -v -keystore your_app_keystore.jks -alias your_key_alias - 注意:正式版、测试版应用的签名证书可能不同,需要分别对应维护哈希值。
- 可通过Android Studio的签名报告获取,或使用
2. 后端复现哈希码生成逻辑
按照Google定义的规则,在后端实现哈希码的生成流程:
- 拼接字符串:将包名和SHA-256哈希值拼接为
[包名] [SHA-256哈希值]的格式 - 计算HMAC-SHA256:使用SHA-256哈希值的字节数组作为密钥,对拼接后的字符串进行HMAC-SHA256加密
- 截取并编码:取加密结果的前11个字节,再进行Base64编码,得到的就是合法的应用哈希码
3. 验证哈希码合法性
当收到包含哈希码的OTP短信时:
- 用上述逻辑生成当前应用的所有合法哈希码(覆盖不同签名环境的情况)
- 检查短信中的哈希码是否存在于合法列表中:
- 存在则判定为合法哈希码,继续处理OTP
- 不存在则判定为恶意/可疑哈希码,直接拒绝处理该短信
注意事项
- 务必妥善保管签名证书的SHA-256哈希值,避免泄露,防止攻击者伪造合法哈希码
- 如果应用有多个签名环境(如开发、测试、生产),需要分别生成对应哈希码并加入验证列表
内容的提问来源于stack exchange,提问作者Gufran Khurshid
相关产品推荐
相关产品推荐

