应用内购买验证:Google开发者指南示例app的verifyValidSignature方法解析
Google内购签名验证:BillingManager中的verifyValidSignature方法
在Google官方开发者指南提供的内购示例应用里,BillingManager类里专门封装了用于验证购买签名合法性的verifyValidSignature()方法,相关代码和说明如下:
/** * 验证购买是否使用开发者的公钥正确签名。 * * 注意:强烈建议在后端执行此类检查,因为黑客若反编译/重新构建应用,可将此方法替换为"返回常量true"。 */ private boolean verifyValidSignature(String signedData, String signature) { try { // 这里是核心的签名验证逻辑,需使用你的开发者公钥 // 对传入的signedData和signature进行校验(比如借助Security类相关方法) // 示例中用return true作为占位,实际开发要替换为真实的校验结果 return true; } catch (Exception e) { // 任何验证过程中的异常都直接判定为验证失败 return false; } }
必须重视的几个点
- 后端验证才是安全的:划重点!这个方法如果只在客户端执行,安全性几乎为零——攻击者很容易反编译你的APP,把这个方法改成直接返回
true,轻松绕过签名验证。所以一定要把签名校验逻辑放到你的后端服务器上,客户端只负责把购买得到的signedData和signature传给后端,由后端完成验证后返回结果。 - 异常处理不能少:不管是公钥格式错误,还是签名解析失败,只要出现异常就直接返回
false,绝对不能让异常导致验证逻辑被跳过。 - 公钥别乱存:开发者的公钥千万别直接硬编码在客户端代码里,最好是由后端持有,或者通过安全的接口动态获取,避免被攻击者轻易提取。
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

