Verificación de la firma RSA de Google Licensing con PyCrypto

Estoy construyendo una implementación de Python de la verificación de la firma de la licencia de Google . Tengo problema al importar la clave RSA pública en el módulo python.

La clave es un RSA de 2048 bits y la parte pública de esta clave que obtiene de la consola de desarrolladores de Google Play. Es "codificado en base64".

Cuando intento cargarlo con el siguiente código de Python

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

ValueError: RSA key format is not supported el error ValueError: RSA key format is not supported

Consigo el mismo error cuando agrego descodificación de base64.

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

Comprobando la implementación estándar de cómo se carga la clave en Android se decodifica en base64 y luego se envía a una clase llamada X509EncodedKeySpec . El constructor de esta clase toma un argumento

 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. 

Por lo tanto, mi conjetura es que la clave está X.509 codificado y luego base64 endoded. Sin embargo, la función importKey en el módulo RSA afirma que admite esta codificación

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

El síntoma de que los valores codificados en base 64 que se soportan fuera de la caja por el código x509 que proporcionó probablemente no es cierto.

X.509 subjectPublicKeyInfo SECUENCIA DE DER (codificación binaria o PEM)

Codificación binaria o pem directamente indicada. De hecho, usted tiene que decodificar la cadena de 64 codificado cadena, y luego averiguar qué hacer desde su (no estoy seguro de lo que la salida de la decodificación producirá en relación con el código X509)

Mi clave fue corrompida y el enfoque anterior funcionó bien, como lo señaló @GregS.

  • RSA y AES Descifrar y cifrar el problema
  • RSA cifra con clave pública codificada en base64 en Android
  • El exponente privado de Android KeyStore no se puede extraer
  • RSA Encryption: Diferencia entre Java y Android
  • Diferentes claves públicas RSA generadas en Android
  • Determinar el certificado de firma de un APK
  • Android BigInteger ArithmeticException
  • Mensaje firmado usando OpenSSL; No se puede verificar con Android Java
  • Android - ¿Codificar y decodificar RSA con clave privada?
  • Java: ¿Cómo puedo generar PrivateKey de una cadena?
  • Descodificación RSA con clave pública
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.