Java Cryptography - Abrufen von Schlüsseln
In diesem Kapitel erfahren Sie, wie Sie mithilfe von Java Cryptography einen Schlüssel aus dem Keystore abrufen.
Führen Sie die folgenden Schritte aus, um einen Schlüssel aus dem Schlüsselspeicher abzurufen.
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 mit dieser Methode ein Objekt der KeyStore-Klasse, wie unten gezeigt.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
Schritt 2: Laden Sie das KeyStore-Objekt
Das load() Methode der KeyStore-Klasse akzeptiert a FileInputStream Objekt, das die Keystore-Datei darstellt, und ein 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);
Schritt 7: Erstellen Sie das KeyStore.SecretKeyEntry-Objekt
Das getEntry() Die Methode der KeyStore-Klasse akzeptiert einen Alias (String-Parameter) und ein Objekt der ProtectionParameter-Klasse als Parameter und gibt a zurück KeyStoreEntry Objekt, dann können Sie dieses es in werfen KeyStore.SecretKeyEntry Objekt.
Erstellen Sie ein Objekt der KeyStore.SecretKeyEntry-Klasse, indem Sie den Alias für den erforderlichen Schlüssel und das in den vorherigen Schritten erstellte Schutzparameterobjekt an das übergeben getEntry() Methode wie unten gezeigt.
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
Schritt 8: Erstellen Sie das Schlüsselobjekt des abgerufenen Eintrags
Das getSecretKey() Methode der SecretKeyEntryKlasse gibt ein SecretKey-Objekt zurück. Erstellen Sie mit dieser Methode ein SecretKey-Objekt wie unten gezeigt.
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
Beispiel
Das folgende Beispiel zeigt, wie Schlüssel aus einem Schlüsselspeicher abgerufen werden. Hier speichern wir einen Schlüssel in einem Schlüsselspeicher, der sich in der Datei „cacerts“ (Windows 10-Betriebssystem) befindet, rufen ihn ab und zeigen einige seiner Eigenschaften an, z. B. den zum Generieren des Schlüssels verwendeten Algorithmus und das Format von der abgerufene Schlüssel.
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.KeyStore.ProtectionParameter;
import java.security.KeyStore.SecretKeyEntry;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class RetrievingFromKeyStore{
public static void main(String args[]) throws Exception{
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
//Loading the the KeyStore object
char[] password = "changeit".toCharArray();
java.io.FileInputStream fis = new FileInputStream(
"C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts");
keyStore.load(fis, password);
//Creating the KeyStore.ProtectionParameter object
ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
SecretKeyEntry secretKeyEntry = new 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);
//Creating the KeyStore.SecretKeyEntry object
SecretKeyEntry secretKeyEnt = (SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println("Algorithm used to generate key : "+mysecretKey.getAlgorithm());
System.out.println("Format used for the key: "+mysecretKey.getFormat());
}
}
Ausgabe
Das obige Programm erzeugt die folgende Ausgabe -
Algorithm used to generate key: DSA
Format of the key: RAW