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



有时,当一个人通过IAB在android设备上进行购买后,由于"TypeError:填充不正确"异常,客户端发送回服务器的签名无法进行base64解码。

服务器代码如下所示,其中"签名"从我们的客户端传递到服务器,这些客户端从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_ddata_hash,signature_decoded)返回False)。

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

如有任何帮助,我们将不胜感激!谢谢

我试着在的末尾添加"=="

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

最新更新