Frage

Ich versuche, ein X509-Zertifikat zu analysieren, die eine Digital Signature Algorithm (DSA) Öffentliche Schlüssel enthalten.

Mit der javax.security.cert.X509Certificate Klasse und getPublicKey () Methode, die ich habe in der Lage P, Q, G und Y zu erhalten:

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

Allerdings bin ich mir nicht sicher, was formatiert das ist und wie analysieren sie es zu lange konvertieren \ BigInteger in Java.

Weiß jemand, wie diese Umwandlung zu tun?

Ich bin derzeit davon aus, es Hex ist und ich es als so bin Parsen -. Aber ich bin nicht 100% sicher, ob dies richtig ist

Danke,    Dave

War es hilfreich?

Lösung

Sie sollten bereits haben die großen Zahlen. Hier ist, wie es für mich geht:

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

das codierte Zertifikat unter der Annahme ist in ecert. Schnittstellen DSAPublicKey und DSAParams sind in java.security.interfaces.

Sie können auch eine KeyFactory gehen und verwenden Sie die getKeySpec() Methode den öffentlichen Schlüssel als DSAPublicKeySpec zu exportieren, die die gleichen Werte wie BigInteger Instanzen bieten wird. Ich bin nicht sicher, ob es ein Gewinn durch diesen Weg zu gehen, aber.

Was Sie zeigen ist wahrscheinlich eine Art von Codierung, aber ich bin ganz mit Verlust, die man zu kennen. Wie dem auch sei, wird für den ‚Q‘ Parameter zumindest 160 Bit breit in einem richtigen DSA öffentlichen Schlüssel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top