You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android本地解密Google Play Integrity响应遇BAD_DECRYPT异常求助

Google Play Integrity本地解码抛出AEADBadTagException异常的原因分析

以下是导致该异常的常见原因及排查方向:

1. Base64解码模式不匹配

Play Console提供的解密密钥和验证密钥采用URL安全的Base64编码(用-、_替代标准Base64的+、/),而你的代码中使用Base64.DEFAULT解码,会导致密钥字节数组解析错误,最终触发解密失败。服务器端大概率使用了正确的URL安全解码模式,因此能正常工作。

建议修改Base64解码参数:

val decryptionKeyBytes: ByteArray = Base64.decode(base64OfEncodedDecryptionKey, Base64.URL_SAFE or Base64.NO_WRAP)
val encodedVerificationKey: ByteArray = Base64.decode(base64OfEncodedVerificationKey, Base64.URL_SAFE or Base64.NO_WRAP)

2. Nonce生成/传递不一致

请求Integrity Token时传入的nonce必须满足:

  • 原始数据长度为16-32字节,再经过Base64编码
  • 本地生成的nonce与服务器端验证用的nonce完全一致(包括编码方式、无额外空格/换行)

如果本地nonce生成不符合规范,会导致返回的token无法被正确解密。

3. 密钥配置错误

  • 确认本地使用的解密密钥是Play Console中下载的对称密钥(用于JWE解密),而非验证用的EC公钥
  • 检查密钥字符串是否完整复制,无多余空格、换行符或截断

4. 依赖库版本差异

服务器端与Android端使用的jose4j库版本不一致,可能导致AES-GCM加密算法的实现细节差异,触发解密失败。确保两端使用相同版本的jose4j库。

5. Android系统加密环境限制

部分旧Android版本(API < 23)对AES-GCM的支持存在兼容性问题,或者AsyncTask线程环境下加密操作受到系统权限/库的限制。可以尝试将解密操作移至普通线程,或者在更高版本的Android设备上测试。


内容的提问来源于stack exchange,提问作者rysv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:22:48