2017-01-07 2 views
0

Ich habe einen publicKey/privateKey Paar aus dieser Funktion generiert:RSA Publickey zu Base64 konvertieren und umgekehrt

public static void generateKey() { 
     try { 
      final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM); 
      keyGen.initialize(2048); 
      final KeyPair key = keyGen.generateKeyPair(); 

      File privateKeyFile = new File(PRIVATE_KEY_FILE); 
      File publicKeyFile = new File(PUBLIC_KEY_FILE); 

      // Create files to store public and private key 
      if (privateKeyFile.getParentFile() != null) { 
       privateKeyFile.getParentFile().mkdirs(); 
      } 
      privateKeyFile.createNewFile(); 

      if (publicKeyFile.getParentFile() != null) { 
       publicKeyFile.getParentFile().mkdirs(); 
      } 
      publicKeyFile.createNewFile(); 

      // Saving the Public key in a file 
      ObjectOutputStream publicKeyOS = new ObjectOutputStream(
        new FileOutputStream(publicKeyFile)); 
      publicKeyOS.writeObject(key.getPublic()); 
      publicKeyOS.close(); 

      // Saving the Private key in a file 
      ObjectOutputStream privateKeyOS = new ObjectOutputStream(
        new FileOutputStream(privateKeyFile)); 
      privateKeyOS.writeObject(key.getPrivate()); 
      privateKeyOS.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

Jetzt möchte ich publicKey zu base64 konvertieren, während diese Base64 dekodieren zu schreiben und verwenden publicKey zurück zu bekommen, Wie kann das gemacht werden?

+0

Hah, dachte ich auf Crypto war aufgrund der Bearbeitung von E-Sushi: P –

Antwort

0

Im Allgemeinen, wenn Sie eine Datei in der Basis 64 speichern möchten, können Sie einfach das Byte-Array codieren. Sie können sogar einen Base64-Stream zwischen ObjectOutputStream und FileOutputStream setzen (hilfreich bereitgestellt von der Base64-Klasse in Java 8).

jedoch öffentliche Schlüssel und private Schlüssel haben Standardcodierungen, die ihre getEncoded Methoden zugegriffen werden kann:

PublicKey publicKey = key.getPublic(); 
byte[] encodedPublicKey = publicKey.getEncoded(); 
String b64PublicKey = Base64.getEncoder().encodeToString(encodedPublicKey); 

try (OutputStreamWriter publicKeyWriter = 
     new OutputStreamWriter(
       new FileOutputStream(publicKeyFile), 
       StandardCharsets.US_ASCII.newEncoder())) { 
    publicKeyWriter.write(b64PublicKey); 
} 

Das in SubjectPublicKeyInfo Format den öffentlichen Schlüssel speichert, etwas, das gelesen und geschrieben werden können, indem mehrere Arten von Software und kryptographische Bibliotheken.

Zum Beispiel können Sie paste it in an online ASN.1 decoder (der Online-Decoder wird es selbst in Hex konvertieren, aber es wird auch Base 64 analysieren). Das Format von Bytes ist in ASN.1/DER (ein generisches Format, genauso wie Sie mehrere Dateitypen in XML kodieren können).

+0

i später ca. getencoded Methode kennen gelernt haben, das funktioniert aber super nutzt i Filewriter schreiben von base64 String-Datei;) –

+0

Ich mag an explizit den Zeichensatz angeben. Für base64 ist dies normalerweise kein Problem, außer wenn der Standardwert UTF-16 ist. Sonst identisch. –

Verwandte Themen