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

use*_*632 7 python android 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)
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试添加"=="到最后,这让我们绕过异常,但与"signed_data_hash"相比,结果无效(即verifier.verify(signed_data_hash,signature_decoded)返回False).

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

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

Sor*_*rin 1

我尝试在末尾添加“==”

听起来不对。您应该仅添加足够的字符串长度,使字符串的长度为 3 的倍数。请查看此处的填充部分: http: //en.wikipedia.org/wiki/Base64