Kriptografi Java - Mengambil kunci
Pada bab ini, kita akan belajar cara mengambil kunci dari keystore menggunakan Kriptografi Java.
Untuk mengambil kunci dari keystore, ikuti langkah-langkah yang diberikan di bawah ini.
Langkah 1: Buat objek KeyStore
Itu getInstance() metode dari KeyStore kelas dari java.security paket menerima nilai string yang mewakili jenis keystore dan mengembalikan objek KeyStore.
Buat objek dari kelas KeyStore menggunakan metode ini seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
Langkah 2: Muat objek KeyStore
Itu load() metode kelas KeyStore menerima a FileInputStream objek yang mewakili file keystore dan parameter String yang menentukan sandi KeyStore.
Secara umum, KeyStore disimpan dalam file bernama cacerts, di lokasi C:/Program Files/Java/jre1.8.0_101/lib/security/ dan kata sandi defaultnya adalah changeit, muat menggunakan load() metode seperti yang ditunjukkan di bawah ini.
//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);
Langkah 3: Buat objek KeyStore.ProtectionParameter
Buat instance KeyStore.ProtectionParameter seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Langkah 4: Buat objek SecretKey
Buat SecretKey (interface) dengan membuat instance kelas Sub-nya SecretKeySpec. Saat membuat instance, Anda perlu meneruskan kata sandi dan algoritme sebagai parameter ke konstruktornya seperti yang ditunjukkan di bawah ini.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Langkah 5: Buat objek SecretKeyEntry
Buat objek dari SecretKeyEntry kelas dengan melewati SecretKey objek yang dibuat pada langkah di atas seperti yang ditunjukkan di bawah ini.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
Langkah 6: Setel entri ke KeyStore
Itu setEntry() metode dari KeyStore kelas menerima parameter String yang mewakili alias entri keystore, a SecretKeyEntry object, sebuah object ProtectionParameter dan, menyimpan entri di bawah alias yang diberikan.
Setel entri ke keystore menggunakan setEntry() metode seperti yang ditunjukkan di bawah ini.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Langkah 7: Buat objek KeyStore.SecretKeyEntry
Itu getEntry() metode kelas KeyStore menerima alias (parameter String) dan, objek dari kelas ProtectionParameter sebagai parameter dan mengembalikan KeyStoreEntry objek maka Anda dapat memasukkannya ke dalamnya KeyStore.SecretKeyEntry obyek.
Buat objek kelas KeyStore.SecretKeyEntry dengan meneruskan alias untuk kunci yang diperlukan dan objek parameter perlindungan yang dibuat di langkah sebelumnya, ke getEntry() metode seperti yang ditunjukkan di bawah ini.
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
Langkah 8: Buat objek kunci dari entri yang diambil
Itu getSecretKey() metode dari SecretKeyEntrykelas mengembalikan objek SecretKey. Menggunakan metode ini, buat objek SecretKey seperti yang ditunjukkan di bawah ini.
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
Contoh
Contoh berikut menunjukkan cara mengambil kunci dari penyimpanan kunci. Di sini, kami menyimpan kunci di keystore, yang ada di file "cacerts" (sistem operasi windows 10), mengambilnya, dan menampilkan beberapa propertinya seperti algoritme yang digunakan untuk membuat kunci dan, format kunci yang diambil.
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());
}
}
Keluaran
Program di atas menghasilkan keluaran berikut -
Algorithm used to generate key: DSA
Format of the key: RAW