Ich möchte den privaten Schlüssel aus einer Zeichenfolge (eine .pem
Datei) in Java generieren.Wie generiere ich RSA Private Schlüssel aus * pem Zeichenfolge in Java
private static final String test = "-----BEGIN RSA PRIVATE KEY-----\n" +
"MIIEpAIBAAKCAQEAvcCH8WsT1xyrZqq684VPJzOF3hN5DNbowZ96Ie//PN0BtRW2\n" +
// and so on
"-----END RSA PRIVATE KEY-----";
try {
String privKeyPEM = test.replace("-----BEGIN RSA PRIVATE KEY-----\n", "");
privKeyPEM = privKeyPEM.replace("-----END RSA PRIVATE KEY-----", "");
byte [] encoded = Base64.decode(privKeyPEM);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey privKey = kf.generatePrivate(keySpec);
}
catch (Exception e) {
e.printStackTrace();
}
Die letzte Zeile (generatePrivate Funktion) wirft diese Ausnahme:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(Unknown Source)
at java.security.KeyFactory.generatePrivate(Unknown Source)
at Test.main(Test.java:52)
Caused by: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
at sun.security.pkcs.PKCS8Key.decode(Unknown Source)
at sun.security.pkcs.PKCS8Key.decode(Unknown Source)
at sun.security.rsa.RSAPrivateCrtKeyImpl.<init>(Unknown Source)
at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(Unknown Source)
at sun.security.rsa.RSAKeyFactory.generatePrivate(Unknown Source)
... 3 more
Wenn ich den privaten Schlüssel auf den Wert ändern aus einer .der
Datei funktioniert es richtig, aber ich brauche die privat zu erzeugen Schlüsseldatei aus einer .pem
Datei.
Ich habe einen Screenshot der Bytes als String (einmal hart-codiert mit \ n und einmal hart-codiert ohne \ n) und einmal aus der Datei gedruckt.
Das Seltsame ist, dass die Ausgabe von der Datei mit dem Ausgang von den Saiten unterschiedlich ist. Wenn ich versuche, eine .der
Datei mit Base64 zu codieren, ist das Ergebnis anders als die Zeichenfolge in der Datei .pem
. Warum ist das so?
Haben Sie überhaupt eine Antwort gefunden? –
@SankarP nein, nicht wirklich. – Niklas
okay. Ich habe die Lösung gefunden. Schlüssel, die mit "----- BEGIN RSA PRIVATE KEY" beginnen, sind pkcs1-kodierte Dateien. Diese pkcs1-Codierung wird von Java nur unterstützt, wenn Sie eine externe Bibliothek wie BouncyCastle verwenden. Ich bin gestern auf das gleiche Problem gestoßen und habe nach ca. 8 Stunden die Lösung gefunden. Wenn Sie den privaten Schlüssel mit pkcs8 verschlüsseln, wird es wie "--- BEGIN PRIVATE KEY ---" beginnen, was durch das Lager-Java gehandhabt wird. HTH. –