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".
- Descifrado RSA en Android - iPhone
- KeyPairGeneratorSpec reemplazo con los equivalentes de KeyGenParameterSpec.Builder - falló la operación del almacén de claves
- Diferencia de cifrado asimétrica - Android vs Java
- Servidor Android y PHP: cifrar y descifrar datos
- ¿Cómo crear una llave RSA keystore Android con una validez infinita?
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)
- Obtener el error java.lang.ArrayIndexOutOfBoundsException: demasiados datos para el bloque RSA
- ¿Cómo puedo verificar un Google oficial apk
- SHA256 con firma RSA devuelve salidas diferentes en varios dispositivos Android
- Cadena de signos con PEM PrivateKey
- Implementación de RSA Publickey en android
- Obteniendo 1 byte extra en el módulo RSA Key ya veces para exponentes también
- Cómo almacenar la contraseña en Android
- Cómo cargar adbkey.pub con Python RSA
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.