Java Cryptography - Anahtarları alma
Bu bölümde, Java Cryptography kullanarak anahtar deposundan bir anahtarın nasıl alınacağını öğreneceğiz.
Anahtar deposundan bir anahtar almak için aşağıda verilen adımları izleyin.
1. Adım: Bir KeyStore nesnesi oluşturun
getInstance() yöntemi KeyStore sınıfı java.security paket, anahtar deposu türünü temsil eden bir dize değerini kabul eder ve bir KeyStore nesnesi döndürür.
Aşağıda gösterildiği gibi bu yöntemi kullanarak KeyStore sınıfının bir nesnesini oluşturun.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
2. Adım: KeyStore nesnesini yükleyin
load() KeyStore sınıfının yöntemi bir FileInputStream anahtar deposu dosyasını temsil eden nesne ve KeyStore şifresini belirten bir String parametresi.
Genel olarak, Anahtar Deposu adlı dosyada saklanır cacerts, konumda C:/Program Files/Java/jre1.8.0_101/lib/security/ ve varsayılan şifresi changeit, kullanarak yükleyin load() yöntemi aşağıda gösterildiği gibi.
//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);
3. Adım: KeyStore.ProtectionParameter nesnesini oluşturun
KeyStore.ProtectionParameter'i aşağıda gösterildiği gibi örnekleyin.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Adım 4: Bir SecretKey nesnesi oluşturun
Oluştur SecretKey (arabirim) nesnesi, Sub sınıfını başlatarak SecretKeySpec. Örnek oluştururken, aşağıda gösterildiği gibi kurucusuna parametre olarak şifre ve algoritma geçirmeniz gerekir.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Adım 5: Bir SecretKeyEntry nesnesi oluşturun
Bir nesneyi oluşturun SecretKeyEntry sınıfı geçerek SecretKey yukarıdaki adımda oluşturulan nesne aşağıda gösterildiği gibi.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
6.Adım: KeyStore'a bir giriş ayarlayın
setEntry() yöntemi KeyStore sınıfı, anahtar deposu giriş diğer adını temsil eden bir String parametresi kabul eder, bir SecretKeyEntry nesne, bir ProtectionParameter nesnesi ve girişi verilen diğer ad altında depolar.
Girişi kullanarak anahtar deposu için ayarlayın. setEntry() yöntemi aşağıda gösterildiği gibi.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Adım 7: KeyStore.SecretKeyEntry nesnesini oluşturun
getEntry() KeyStore sınıfının yöntemi bir diğer adı (String parametresi) ve ProtectionParameter sınıfının bir nesnesini parametre olarak kabul eder ve bir KeyStoreEntry nesne, sonra bunu içine atabilirsiniz KeyStore.SecretKeyEntry nesne.
Gerekli anahtar ve önceki adımlarda oluşturulan koruma parametresi nesnesi için takma adı ileterek KeyStore.SecretKeyEntry sınıfının bir nesnesini oluşturun. getEntry() yöntemi aşağıda gösterildiği gibi.
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
Adım 8: Alınan girişin anahtar nesnesini oluşturun
getSecretKey() yöntemi SecretKeyEntryclass bir SecretKey nesnesi döndürür. Bu yöntemi kullanarak aşağıda gösterildiği gibi bir SecretKey nesnesi oluşturun.
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
Misal
Aşağıdaki örnek, bir anahtar deposundan anahtarların nasıl alınacağını gösterir. Burada, "cacerts" dosyasında (Windows 10 işletim sistemi) bulunan bir anahtar deposunda bir anahtar saklıyoruz, onu alıyor ve anahtarı oluşturmak için kullanılan algoritma ve formatı gibi bazı özelliklerini görüntülüyoruz. alınan anahtar.
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());
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Algorithm used to generate key: DSA
Format of the key: RAW