Ich muss einen privaten RSA-Schlüssel im Speicher im PEM-Format in eine PrivateKey
auf Android konvertieren.PEM zu PrivateKey
Das Problem scheint for public keys gelöst worden zu sein, aber ich kämpfe, um es für einen privaten Schlüssel zu arbeiten. Ich versuche, den folgenden Code:
String pemkey = "MIICWwIBAAKBgQDIuL0SzG1+wgyaoyDyHvYIaG10ePXBHqaKTnYyZfY5RzaEFLE/vBdFN2Di7AMH3/5iN/YFQqLsVjKqzX3E3LM2dJOZ9qSWeYArSyQPbhy0eM/3amwchvtLvhVLm2UqVFLjiPGlyYX3D75ETD5tmgulAc5ZDRtGqYVoLKPmZ0USPwIDAQABAoGAErfDjf65UUJISZ1fw6Rmfic62csz47P3hNtHQ3Dlsra020FQvChOpTpCUzb+G1xkjQU58Iijx9VL+Uiba2HHZmiJX2LgS3KKqKFZKmbKZnZQTiw+2o+4AXhtcAYfSAJE9TgRPEhwhZmzV2cvfUk5AjnOghSn2gGjdD1g4xtH22ECQQD/ZbfEd2HEGqHf6j/AVMW+N/Q1xtYIB8r0CWxF6cNw5iq/8Ce9ujpnAFi0vgtojyKDlgwBp4XMU2C4is49EkFhAkEAyTH96mS8dExAAmi3Mm2seUIEOtKwuLD6BEECecPyZSIOd24tfNbmA7Ri6MpGjyLZoNoJQ0AJGcnWU1tnc8bXnwJAS+jYyP1OwrHDwUDnt+u6ZoJNBJrXzMU8LnKKivEjFPBkbm4b8cljSHAS7Y266FX6xS+Y2/kFzKhPjCo9iGtfoQJAOv39hYyj9TWmTw6FKLQfri49L0I3ru+1Xynwn+NkX2Ls+vfDPqeEKfHqTneA2NdPGGrV7HIKORWFUkuqubfD4QJAK60RuhDSeH+ZljcYLhbHLoTnja/uTcvDAd0M4ll2HUNId4jPbYl1qw7OQwfg8apKmGwp7HGW50o/EItvvJrR7w==";
byte[] encoded = Base64.decode(pemkey, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey sessionkey = kf.generatePrivate(keySpec);
(Der Schlüssel ist nicht das gleiche wie für meine Bitcoin Brieftasche so nicht die Mühe machen ^^)
Die letzte Zeile
java.security.spec.InvalidKeySpecException:
Must use RSAPublicKeySpec or PKCS8EncodedKeySpec;
was java.security.spec.X509EncodedKeySpec
den Fehler gibt
Ich testete die pemkey
Zeichenfolge in anderen Sprachen (zB Python RSA.importkey
) in Ordnung zu sein, und es funktioniert gut.
Edit:
Auf Vorschlag durch einen Kommentar (und die Antwort auf die als doublicate verknüpfte Frage), habe ich auch mit X509EncodedKeySpec
durch PKCS8EncodedKeySpec
ersetzt versucht. Dann ist der neue Fehler, den ich bekomme,
Können Sie versuchen, 'PKCS8EncodedKeySpec' für den privaten Schlüssel und' RSAPublicKeySpec' für den öffentlichen Schlüssel zu verwenden. Sagen Sie mir, wenn es funktioniert, aber sicher müssen Sie den neuen privaten Schlüssel verwenden – Greggz
Ich bekomme 'java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: Fehler: 0D0680A8: ASN1 Codierung Routinen: ASN1_CHECK_TLEN: falsches Tag' nach dem Ersetzen' X509EncodedKeySpec' von 'PKCS8EncodedKeySpec'. – matec
Mögliches Duplikat von [Android RSA privaten und öffentlichen Schlüssel speichern] (https://stackoverflow.com/questions/28306782/android-save-rs-a-private-and-public-key) – Greggz