在应用内购买后base64解码谷歌签名时出现填充错误

时间:2013-11-21 19:23:25

标签: android python in-app-billing

有时候,当一个人通过IAB和Android设备进行购买后,由于“TypeError:Incorrect padding”异常,客户端发送回服务器的签名无法进行base64解码。

服务器代码如下所示,其中“signature”从我们的客户端传递到服务器,从IAB API获取值:

signature_encoded = signature.encode()
key = RSA.importKey(GOOGLE_PLAY_STORE_KEY_PEM)
verifier = PKCS1_v1_5.new(key)
signed_data_hash = SHA.new(signed_data)
# fails here SOMETIMES
signature_decoded = base64.urlsafe_b64decode(signature_encoded)

“签名”字符串的长度应该可以被4整除,但有时它们的长度为342并给出这个填充错误。

我已经尝试在结尾处添加“==”并使我们绕过异常,但与“signed_data_hash”相比,结果无效(即verifier.verify(signed_data_hash,signature_decoded)返回False)。

我不认为这是一次黑客攻击,因为我们看到的客户端日志表明他们正在通过我们的购买流程。

这里的任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:1)

  

我尝试在最后添加“==”

听起来不错。您应该添加足够的内容,以便字符串的长度是3的倍数。 在这里查看填充部分:http://en.wikipedia.org/wiki/Base64