Question

Je suis en train d'analyser un certificat X509 qui contient un algorithme de signature numérique (DSA) de clé publique.

Utilisation de la classe javax.security.cert.X509Certificate et méthode getPublicKey () Je suis en mesure d'obtenir P, Q, G et 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

Cependant, je ne suis pas sûr de ce que le format est ce et comment l'analyser pour le convertir en temps \ BigInteger en Java.

Quelqu'un sait-il comment faire cette conversion?

Je suis actuellement en supposant qu'il est Hex et je l'analyse comme si - mais je ne suis pas sûr à 100% si cela est correct

.

Merci,    Dave

Était-ce utile?

La solution

Vous devez déjà ont les grands entiers. Voici comment ça se passe pour moi:

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());

en supposant que le certificat codé est en ecert. Interfaces DSAPublicKey et DSAParams sont java.security.interfaces.

Vous pouvez également passer par un KeyFactory et utiliser la méthode getKeySpec() pour exporter la clé publique comme DSAPublicKeySpec, qui offrira les mêmes valeurs que les instances de BigInteger. Je ne sais pas s'il y a un gain de passer par cette route, cependant.

Ce que vous montrez est probablement une sorte d'encodage, mais je suis tout à fait à une perte de savoir lequel. Quoi qu'il en soit, le paramètre « Q » est au moins 160 bits de large dans une clé publique appropriée DSA.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top