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");