Ошибка заполнения после того, как base64decoding подписи Google после покупки в приложении

Иногда, после того, как человек совершает покупку на устройстве android через IAB, подпись, которую клиент отправляет обратно на сервер, не может быть декодирована base64 из-за исключения типа TypeError: Incorrect padding.

Код сервера выглядит так, где «подпись» передается на сервер от наших клиентов, которые получили значение от 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).

Я не думаю, что это попытка взлома, так как журналы клиентов, которые мы видим, показывают, что они проходят через наш поток покупок.

Любая помощь здесь будет принята с благодарностью! Благодаря!

Я пытался добавить «==» до конца

Звучит неправильно. Вы должны добавить только достаточно, чтобы длина строки была кратной 3. Ознакомьтесь с разделом заполнения здесь: http://en.wikipedia.org/wiki/Base64