「TypeError:Incorrect padding」のために、クライアントがIAB経由でアンドロイドデバイスで購入した後、クライアントがサーバーに返す署名をbase64で復号できないことがあります"例外。アプリ内購入後にbase64decoding Google署名のパディングエラー
「署名は」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を返します)と比較して有効ではありません。
これはハッキングの試みではありません。私たちが見ているクライアントのログは購入フローを通過していることを示しているからです。
ここにお手伝いいただければ幸いです。ありがとう!
[これらのいくつかを試してください](http://stackoverflow.com/questions/2941995/python -ignore-incorrect-padding-error-base64デコード時) – PurityLake
シグネチャ文字列の実際のバイト数はどのくらいですか?それはあなたにエラーを与えている可能性があり、バイトがそのエラーが何であるかを記述している可能性があります。 – Claris
文字列を見ることなく、伝えるのは難しいです。 1つは、呼び出しに応じて、IAB APIが署名用の文字列を返すことがあり、そうでない場合はstringlistが返されることがあります。改行文字がある可能性があります。私はそれが問題に関連しているとは思わないが、データがquery_stringの一部として渡されない限り、あなたはurlsafeを必要としない(私は疑う)。また、署名ユニコードですか?なぜあなたはencode()を使用していますか?検証者を実行するにはdecode()が必要ですか?修正プログラムを推測するためにコードが多すぎます。 –