Extraer datos de la clave pública de RSA
Estoy trabajando en un proyecto que implica leer datos de clave pública utilizados para firmar APKs de Android. Puedo extraer con éxito las firmas como llaves públicas. Cuando miro dentro de los archivos binarios del pubkey producidos por esto, veo un cierto texto llano tal como un nombre y una ciudad.
¿Cómo puedo extraer con seguridad esta información de nombre / ciudad incrustada dentro de la clave pública usando PHP (o incluso Java o C #)? Y espero hacerlo de tal manera que sé exactamente lo que estos campos son (es decir, no ciegamente agarrar el texto, pero saber qué cadena es una ciudad y que es un nombre)
- ¿Cómo subo la imagen en el servidor en formato jpg o png en Titanium (Android)?
- Archivo de imagen de Android enviado a archivo de imagen de carga de php es el tipo de aplicación / octet-stream y no image / jpeg?
- Recuperar la imagen de mysql-php (android)
- ¿Cómo enviar una respuesta de PHP a una aplicación móvil de Android / Java?
- Seguridad y autenticación cliente-servidor
Para aclaración: No tengo la clave privada o un archivo de certificado. Actualmente no estoy interesado en la firma o cifrado de nada, sólo me gustaría extraer el texto sin formato en el pubkey sin usar enfoques kludgy como regex.
Actualización: Aquí hay una clave pública de ejemplo (base64-codificada) de uno de mis APKs
MIICBzCCAXCgAwIBAgIES6KlazANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJVUzELMAkGA1UECBMCUkkxFTATBgNVBAcTDE5hcnJhZ2Fuc2V0dDEVMBMGA1UEAxMMQ29saW4gTydEZWxsMB4XDTEwMDMxODIyMTI1OVoXDTQ1MDMwOTIyMTI1OVowSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlJJMRUwEwYDVQQHEwxOYXJyYWdhbnNldHQxFTATBgNVBAMTDENvbGluIE8nRGVsbDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPetcBW+ITURXY0LsI2ZfgM3R7K2kwicgpd0W+BYAXQBh76SXyN9MYvtfnUY3SNz37FW/lDQgAO3pbhEFqGwfADh2ctXlYmlE9DtcRQw0ojGVPIDlWBX+9IUxyL/89CPaN84R/1lvdosco4V0BqQYR300S9ZwmwFA2Vh9hSUZmsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBezKu4G11Z68NTPIBro8xsnbkdYxObzW7BsSr6t9MS5x6EQVs75R/nnKrsMcQ+9ImdT940jhQgZT3ZrYla5VhdbelxnLhBVbJfBdipV3Hv2bG7MnXzFqHYwQqYp+UrP8zWm1YHQf5I/P9VBjlkgwFyNKr0TxP4t/qS08oGX2wvZg==
- Autenticación de API de Laravel RESTful para aplicaciones para móviles
- No se puede conectar a través de WiFi, pero es posible a través de Mobile Data
- Android, enviar mensajes a 1000 dispositivos rápidamente
- Retrofit v2.0.0-beta2 cómo cargar archivos usando RequestBody
- ¿Es aconsejable almacenar imágenes codificadas en base64 dentro de una base de datos?
- Tratando de devolver datos de PHP con JSON a Android ...
- C2DM con PHP usando OAuth2.0 (ClientLogin está obsoleto!)
- ¿Es posible obtener el número de descargas de una aplicación de Google Play?
La cadena que pones es un certificado x509 codificado en base 64, no simplemente una clave pública.
Necesitará analizar los campos de nombre distinguido para obtener la información deseada.
Aquí hay un ejemplo de C #:
using System; using System.Security.Cryptography.X509Certificates; namespace Sample { class Program { static void Main(string[] args) { string base64EncodedX509 = "MIICBzCCAXCgAwIBAgIES6KlazANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJVUzELMAkGA1UECBMCUkkxFTATBgNVBAcTDE5hcnJhZ2Fuc2V0dDEVMBMGA1UEAxMMQ29saW4gTydEZWxsMB4XDTEwMDMxODIyMTI1OVoXDTQ1MDMwOTIyMTI1OVowSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlJJMRUwEwYDVQQHEwxOYXJyYWdhbnNldHQxFTATBgNVBAMTDENvbGluIE8nRGVsbDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPetcBW+ITURXY0LsI2ZfgM3R7K2kwicgpd0W+BYAXQBh76SXyN9MYvtfnUY3SNz37FW/lDQgAO3pbhEFqGwfADh2ctXlYmlE9DtcRQw0ojGVPIDlWBX+9IUxyL/89CPaN84R/1lvdosco4V0BqQYR300S9ZwmwFA2Vh9hSUZmsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBezKu4G11Z68NTPIBro8xsnbkdYxObzW7BsSr6t9MS5x6EQVs75R/nnKrsMcQ+9ImdT940jhQgZT3ZrYla5VhdbelxnLhBVbJfBdipV3Hv2bG7MnXzFqHYwQqYp+UrP8zWm1YHQf5I/P9VBjlkgwFyNKr0TxP4t/qS08oGX2wvZg=="; var rawBytes = Convert.FromBase64String(base64EncodedX509); X509Certificate cert = new X509Certificate(rawBytes); // Parse the distinguished name to get your desired fields Console.WriteLine(cert.Subject); // writes CN=Colin O'Dell, L=Narragansett, S=RI, C=US Console.WriteLine(cert.Issuer); // writes CN=Colin O'Dell, L=Narragansett, S=RI, C=US } } }
Los "archivos pubkey binarios producidos por este" es un certificado X.509.
Casi cualquier plataforma tiene soporte para leer certificados X.509 y crear una estructura a partir de ellos, desde la que se puede extraer de forma fiable el "nombre del sujeto" ya menudo se amplía la información que incluye una dirección de correo electrónico o un nombre de host.
Por ejemplo, si tiene instalado OpenSSL, utilice el siguiente comando:
openssl x509 -text -noout -inform der -in <yourfilehere>
Puede extraer campos específicos con opciones adicionales. Por ejemplo, la adición de los rendimientos del objeto:
Sujeto = / C = US / ST = RI / L = Narragansett / CN = Colin O'Dell
En php, no estoy seguro, pero tal vez esta función podría ser su amigo. Hay una sección completa de funciones relacionadas con ssl que podrían resultar útiles si estás jugando con certificados.
- Mostrar información basada en el botón que se pulsó
- Página de Android / borde detectar y transformar la página. Convertir a B / N tiff