有时候,当一个人通过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)。
我不认为这是一次黑客攻击,因为我们看到的客户端日志表明他们正在通过我们的购买流程。
这里的任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
我尝试在最后添加“==”
听起来不错。您应该添加足够的内容,以便字符串的长度是3的倍数。 在这里查看填充部分:http://en.wikipedia.org/wiki/Base64