Pregunta

Estoy tratando de analizar un certificado X509 que contiene un algoritmo de firma digital (DSA) de clave pública.

Utilización de la clase javax.security.cert.X509Certificate y método getPublicKey () He estado capaz de obtener P, Q, G y Y:

P: 0279b05d bd36b49a 6c6bfb2d 2e43da26 052ee59d f7b5ff38 f8288907 2f2a5d8e 2acad76e ec8c343e eb96edee 11
Q: 036de1
G: 03 
Y: 02790a25 22838207 4fa06715 1def9df5 474b5d84 a28b2b9b 360a7fc9 086fb2c6 9aab148f e8372ab8 66705884 6d

Sin embargo, no estoy seguro de qué formato se trata y cómo analizar a convertirlo a largo \ BigInteger en Java.

¿Alguien sabe cómo hacer esta conversión?

Actualmente estoy asumiendo que es hexagonal y estoy analizarlo como tan -. Pero no estoy 100% seguro de si esto es correcto

Gracias,    David

¿Fue útil?

Solución

debe ya tener los grandes números enteros. Aquí es cómo va para mí:

X509Certificate xc = X509Certificate.getInstance(ecert);
PublicKey pkey = xc.getPublicKey();
DSAPublicKey dk = (DSAPublicKey)pkey;
DSAParams pp = dk.getParams();
System.out.printf("p = 0x%X\n", pp.getP());
System.out.printf("q = 0x%X\n", pp.getQ());
System.out.printf("g = 0x%X\n", pp.getG());
System.out.printf("y = 0x%X\n", dk.getY());

suponiendo que el certificado codificado está en ecert. Interfaces y DSAPublicKey DSAParams están en java.security.interfaces.

También puede ir a través de un KeyFactory y utilizar el método getKeySpec() para exportar la clave pública como un DSAPublicKeySpec, que ofrecerá los mismos valores que los casos BigInteger. No estoy seguro de si hay una ganancia que pasar por ese camino, sin embargo.

Lo que muestran es probablemente algún tipo de codificación, pero estoy bastante en una pérdida para saber cuál. De todos modos, el parámetro 'Q' será como mínimo de 160 bits de ancho en una clave pública DSA adecuado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top