Die Variable PublicKey.getEncoded() gibt ein Bytearray zurück, das den öffentlichen Schlüssel im Format SubjectPublicKeyInfo (x.509) enthält. Wie kann ich es in die RSA Public Key-Codierung konvertieren?Konvertieren eines öffentlichen Schlüssels im Format SubjectPublicKeyInfo in das Format RSAPublicKey java
8
A
Antwort
12
Verwenden Bouncy Castle SubjectPublicKeyInfo
, wie folgt aus:
byte[] encoded = publicKey.getEncoded();
SubjectPublicKeyInfo subjectPublicKeyInfo = new SubjectPublicKeyInfo(
ASN1Sequence.getInstance(encoded));
byte[] otherEncoded = subjectPublicKeyInfo.parsePublicKey().getEncoded();
1
Das folgende Code-Snippet für mich gearbeitet, hatte allerdings BouncyCastle zu verwenden.
byte[] keyBytes = key.getEncoded(); // X.509 for public key
SubjectPublicKeyInfo subPkInfo = new SubjectPublicKeyInfo((ASN1Sequence)ASN1Object.fromByteArray(keyBytes));
byte[] rsaformat = subPkInfo.getPublicKey().getDEREncoded();
3
Ohne BouncyCastle:
PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(publicKeyBinary));
Dies dient nicht der pourpose. Hier haben wir gerade den öffentlichen Schlüssel in ein RSAPublicKey-Objekt geworfen, aber wenn ich RSAPublicKey.getEncoded() sage, bekomme ich immer noch den Schlüssel im x.509-Format und nicht im RSA-Format. –
Bearbeitete die Antwort. Ich hoffe, es macht Ihnen nichts aus, BC zu benutzen. – martijno
Vielen Dank! Dein Ansatz hat funktioniert. Ich poste das genaue Snippet, das ich benutzte. –