Java Cryptography - Speichern von Schlüsseln

Die verwendeten / generierten Schlüssel und Zertifikate werden in einer Datenbank gespeichert, die als Keystore bezeichnet wird. Standardmäßig wird diese Datenbank in einer Datei mit dem Namen gespeichert.keystore.

Sie können mit dem auf den Inhalt dieser Datenbank zugreifen KeyStore Klasse der java.securityPaket. Dies verwaltet drei verschiedene Einträge, nämlich PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry.

  • PrivateKeyEntry
  • SecretKeyEntry
  • TrustedCertificateEntry

Speichern eines Schlüssels im Keystore

In diesem Abschnitt erfahren Sie, wie Sie einen Schlüssel in einem Schlüsselspeicher speichern. Führen Sie die folgenden Schritte aus, um einen Schlüssel im Schlüsselspeicher zu speichern.

Schritt 1: Erstellen Sie ein KeyStore-Objekt

Das getInstance() Methode der KeyStore Klasse der java.security Das Paket akzeptiert einen Zeichenfolgenwert, der den Typ des Schlüsselspeichers darstellt, und gibt ein KeyStore-Objekt zurück.

Erstellen Sie ein Objekt der KeyStore-Klasse mit getInstance() Methode wie unten gezeigt.

//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");

Schritt 2: Laden Sie das KeyStore-Objekt

Das load() Die Methode der KeyStore-Klasse akzeptiert ein FileInputStream-Objekt, das die Keystore-Datei darstellt, und einen String-Parameter, der das Kennwort des KeyStore angibt.

Im Allgemeinen wird der KeyStore in der genannten Datei gespeichert cacerts, in der Lage C:/Program Files/Java/jre1.8.0_101/lib/security/ und sein Standardkennwort ist changeit, laden Sie es mit dem load() Methode wie unten gezeigt.

//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);

Schritt 3: Erstellen Sie das KeyStore.ProtectionParameter-Objekt

Instanziieren Sie den KeyStore.ProtectionParameter wie unten gezeigt.

//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);

Schritt 4: Erstellen Sie ein SecretKey-Objekt

Erstellen Sie die SecretKey (Schnittstellen-) Objekt durch Instanziieren seiner Unterklasse SecretKeySpec. Während der Instanziierung müssen Sie Kennwort und Algorithmus als Parameter an den Konstruktor übergeben, wie unten gezeigt.

//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");

Schritt 5: Erstellen Sie ein SecretKeyEntry-Objekt

Erstellen Sie ein Objekt der SecretKeyEntry Klasse durch das Bestehen der SecretKey Objekt, das im obigen Schritt wie unten gezeigt erstellt wurde.

//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);

Schritt 6: Legen Sie einen Eintrag für den KeyStore fest

Das setEntry() Methode der KeyStore Klasse akzeptiert einen String-Parameter, der den Keystore-Eintragsalias darstellt, a SecretKeyEntry object, ein ProtectionParameter-Objekt und, speichert den Eintrag unter dem angegebenen Alias.

Stellen Sie den Eintrag in den Keystore mit dem ein setEntry() Methode wie unten gezeigt.

//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);

Example

Im folgenden Beispiel werden Schlüssel in dem Schlüsselspeicher gespeichert, der in der Datei "cacerts" (Windows 10-Betriebssystem) vorhanden ist.

import java.io.FileInputStream;
import java.security.KeyStore;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class StoringIntoKeyStore{
   public static void main(String args[]) throws Exception {
      //Creating the KeyStore object
      KeyStore keyStore = KeyStore.getInstance("JCEKS");

      //Loading the KeyStore object
      char[] password = "changeit".toCharArray();
      String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
      java.io.FileInputStream fis = new FileInputStream(path);
      keyStore.load(fis, password);
      
      //Creating the KeyStore.ProtectionParameter object
      KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);

      //Creating SecretKey object
      SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
      
      //Creating SecretKeyEntry object
      KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
      keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);

      //Storing the KeyStore object
      java.io.FileOutputStream fos = null;
      fos = new java.io.FileOutputStream("newKeyStoreName");
      keyStore.store(fos, password);
      System.out.println("data stored");
   }
}

Output

Das obige Programm erzeugt die folgende Ausgabe -

System.out.println("data stored");