Nur RSAPrivate (Crt) KeySpec und PKCS8EncodedKeySpec unterstützt, um private RSA-Schlüssel

Ich folgende Schritte aus dem link : Wie zu Lesen ist .pem-Datei um private und öffentliche Schlüssel. Ich ausgeführt die folgenden drei Befehle:

1. $openssl genrsa -out mykey.pem 2048
2. $openssl pkcs8 -topk8 -inform PEM -outform PEM -in mykey.pem -out private_key.pem -nocrypt
3. $ openssl rsa -in mykey.pem -pubout -outform DER -out public_key.der

Diese erstellt drei Dateien, aber wenn ich versuche zu Lesen, diese über den Java-code habe ich angefangen die Verkleidung unten Fehler:

PUBLIC KEY EXPO : 65537
Only RSAPrivate(Crt)KeySpec and PKCS8EncodedKeySpec supported for RSA private keys

Mein code für Referenz:

public class PublicPrivateKeyDemo {
    private static File privateKeyFile = null;
    private static File publicKeyFile = null;

    public static void main(String[] args) {
        String path = "C:/Users/test898/keys";
        privateKeyFile = new File(path + "/" + "private.pem");
        publicKeyFile = new File(path + "/" + "public.der");

        try {
            loadkeys();
        } catch (IOException | GeneralSecurityException e) {
            System.out.println(e.getMessage());
        }
    }

    private static void loadkeys() throws IOException, GeneralSecurityException {
        byte[] publicKeyBytes = new byte[(int) publicKeyFile.length()];
        FileInputStream publicFis = null;
        publicFis = new FileInputStream(publicKeyFile);
        if (publicFis.read(publicKeyBytes) > 0) {
            X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes);
            KeyFactory factory = KeyFactory.getInstance("RSA");
            RSAPublicKey pubKey = (RSAPublicKey) factory.generatePublic(publicKeySpec);
            BigInteger pKeyModulus = pubKey.getModulus();
            BigInteger pKeyExponent = pubKey.getPublicExponent();
            System.out.println("PUBLIC KEY EXPO : "+pKeyExponent);

        }

        byte[] privateKeyBytes = new byte[(int) privateKeyFile.length()];
        FileInputStream privateFis = null;
        privateFis = new FileInputStream(privateKeyFile);
        if (privateFis.read(privateKeyBytes) > 0) {
            //PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(privateKeyBytes);
            X509EncodedKeySpec spec = new X509EncodedKeySpec(privateKeyBytes);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(spec);
            BigInteger pKeyModulus = privKey.getModulus();
            BigInteger pKeyExponent = privKey.getPrivateExponent();
            System.out.println("PRIVATE KEY : "+pKeyExponent);
        } 
    }
}

Bitte helfen Sie mir, was läuft hier falsch ? Ich nehme an, den Privaten Key geben sollte Wert etwas ähnliche wie unten":

21150549370950609585296765828149303178265715265804890679831411170495636016527926323370428466362501818569080118374307191403222367256185274427528812911191842330928112748042350818573390540259857225467392220170770506599589136056049534085562156615813126185240565396115577449461468695709719589257257375788267753694280485882595576829517086782992300102288858453543505912425724874212273830247789870669315715724390578125469483751830964757980799543436412647956770560679365767737577100276745456138533646455249170660612983618544127693626739283128573829732806886889896396374650462743743148634276240986662548043510018342217214342529
  • Ihr privater Schlüssel muss im DER-format, nicht-PEM. Und sollten Sie die PKCS8EncodedKeySpec für den privaten Schlüssel. Und obwohl es in der Regel arbeiten, dass ist nicht die richtige Art und Weise zu Lesen, in eine Datei. Siehe meine Antwort und die anderen zu einer anderen Frage
InformationsquelleAutor | 2016-09-03
Schreibe einen Kommentar