Проверка подписи RSA от лицензирования Google с помощью PyCrypto

Я создаю реализацию на Python проверки подписи Google License . У меня проблема с импортом открытого ключа RSA в модуль python.

Ключ – это 2048-битный RSA и общедоступная часть этого ключа, который вы получаете с консоли разработчика в Google Play. Это «base64 encoded».

Когда я пытаюсь загрузить его со следующим кодом Python

from Crypto.PublicKey import RSA BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG.." pubkey = RSA.importKey(BASE64_PUBLIC_KEY) 

Я получаю ошибку ValueError: RSA key format is not supported

Я получаю ту же ошибку, когда добавляю декодирование base64.

 from Crypto.PublicKey import RSA import base64 BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG.." pubkey = RSA.importKey(base64.b64decode(BASE64_PUBLIC_KEY)) 

Проверяя стандартную реализацию того, как ключ загружается в Android, он декодируется base64 и затем отправляется в класс под названием X509EncodedKeySpec . Конструктор этого класса принимает один аргумент

 encodedKey - the key, which is assumed to be encoded according to the X.509 standard. The contents of the array are copied to protect against subsequent modification. 

Таким образом, я догадываюсь, что ключ кодируется X.509, а затем base64 endoded. Однако функция importKey в модуле RSA утверждает, что поддерживает эту кодировку

 X.509 subjectPublicKeyInfo DER SEQUENCE (binary or PEM encoding) 

Ваш симптом, что базовые 64 кодированные значения поддерживаются из коробки кодом x509, который вы предоставили, вероятно, неверен.

X.509 subjectPublicKeyInfo DER SEQUENCE (двоичное или PEM-кодирование)

Прямо записанная двоичная или штриховая кодировка. Вы действительно должны декодировать базовую кодированную строку 64, а затем выяснить, что делать с их (я не уверен, какой результат будет производить декодирование по отношению к коду X509)

Мой ключ был поврежден, и вышеупомянутый подход работал отлично, как отмечает @GregS.