2016-06-10 23 views
0

privaten Schlüsselgenerierung zu erzeugenAusgabe in privaten Schlüssel

  public PrivateKey getStoredPrivateKey(String filePath) { 
    PrivateKey privateKey = null; 
    byte[] keydata = getKeyData(filePath); 
    PKCS8EncodedKeySpec encodedPrivateKey = new PKCS8EncodedKeySpec(keydata); 
    KeyFactory keyFactory = null; 
    try { 
     keyFactory = KeyFactory.getInstance("RSA"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    try { 
     System.out.println("hello"); 
     privateKey = keyFactory.generatePrivate(encodedPrivateKey); 
    } catch (InvalidKeySpecException e) { 
     e.printStackTrace(); 
    } 
    return privateKey; 
} 

ich bin mit hier

PrivateKey privateKey = new KryptoUtil().getStoredPrivateKey(privateKeyFilePath); 

aber seine zeigt Fehler

hello 
    java.security.spec.InvalidKeySpecException:       
    java.security.InvalidKeyException: IOException : version mismatch: (supported:  00, parsed:  03 
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(Unknown Source) 

ich vorbei eine (P12-Datei) in der Funktion getStoredPrivateKey (String filePath).

warum gibt es Fehler?

+0

Sind Sie sicher, dass Ihr privater Schlüssel der Spezifikation PKCS # 8 ist. Versuchen Sie es mit anderen Spezifikationen wie RSAPrivateKeySpec –

+0

Wie kann ich feststellen, dass es nicht PKCS # 8 ist – Mudit

Antwort

1

P12 ist ein Keystore-Typ, in dem mehrere Schlüssel und Zertifikate gespeichert werden können und ein Kennwort verwendet werden kann, um sie zu schützen. Sie können über P12 (PKCS12) im Internet suchen. Ihre Datei ist eine P12-Datei, also höchstwahrscheinlich eine PKCS12-Datei.

Um den privaten Schlüssel aus der P12-Datei zu erhalten, verwenden Sie den folgenden Code. Sie benötigen die folgenden Dinge, bevor Sie diesen Code aufrufen.

Dateipfad. String-Pfad (absolut) der P12-Datei.

DateiPasswort. Es ist ein char []. Stellt das Passwort der p12-Datei dar.

SchlüsselPasswort. Es ist ein char []. Stellt das Kennwort für den privaten Schlüssel dar. Die meisten wahrscheinlich ist das gleiche wie filePassword.

alias. Ein Faden. Repräsentiert durch welchen Alias ​​einen in P12 gespeicherten privaten Schlüssel archive/keystore.

Um zu überprüfen, was der Alias ​​Ihres privaten Schlüssels ist, dass Sie unter Befehl

keytool -list -v -keystore <yourfile>.p12 -storetype pkcs12 

Es ist für Passwort fragen dann mehrere Zeilen drucken können. Suchen Sie nach

Entry Type: PrivatKeyEntry 

Dort finden Sie den Alias.

Initialisieren Sie diese Variablen und verwenden Sie den folgenden Code, um den privaten Schlüssel zu erhalten. Sie können auch den Schlüssel Zertifikate/Öffentlicher Schlüssel mit diesem Schlüssel verknüpfen. Suchen Sie nach API von PrivateKeyEntry

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
keyStore.load(new FileInputStream(filePath), filePassword); 
PrivateKeyEntry keyEntry = (PrivateKeyEntry) ks.getEntry(alias, new KeyStore.PasswordProtection(keyPassword)); 
PrivateKey key = privateKeyEntry.getPrivateKey();