Java Cryptography - Lấy khóa
Trong chương này, chúng ta sẽ học cách lấy một khóa từ kho khóa bằng Java Cryptography.
Để lấy khóa từ kho khóa, hãy làm theo các bước dưới đây.
Bước 1: Tạo một đối tượng KeyStore
Các getInstance() phương pháp của KeyStore lớp của java.security gói chấp nhận một giá trị chuỗi đại diện cho kiểu của kho khóa và trả về một đối tượng KeyStore.
Tạo một đối tượng của lớp KeyStore bằng phương pháp này như hình dưới đây.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
Bước 2: Tải đối tượng KeyStore
Các load() phương thức của lớp KeyStore chấp nhận một FileInputStream đối tượng đại diện cho tệp kho khóa và một tham số Chuỗi chỉ định mật khẩu của Kho khóa.
Nói chung, KeyStore được lưu trữ trong tệp có tên cacerts, ở vị trí C:/Program Files/Java/jre1.8.0_101/lib/security/ và mật khẩu mặc định của nó là changeit, tải nó bằng cách sử dụng load() như hình dưới đây.
//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);
Bước 3: Tạo đối tượng KeyStore.ProtectionParameter
Khởi tạo KeyStore.ProtectionParameter như hình dưới đây.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Bước 4: Tạo đối tượng SecretKey
Tạo SecretKey (interface) đối tượng bằng cách khởi tạo lớp con của nó SecretKeySpec. Trong khi khởi tạo, bạn cần chuyển mật khẩu và thuật toán dưới dạng tham số cho hàm tạo của nó như hình dưới đây.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Bước 5: Tạo một đối tượng SecretKeyEntry
Tạo một đối tượng của SecretKeyEntry lớp bằng cách vượt qua SecretKey đối tượng được tạo ở bước trên như hình dưới đây.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
Bước 6: Đặt mục nhập vào KeyStore
Các setEntry() phương pháp của KeyStore lớp chấp nhận một tham số Chuỗi đại diện cho bí danh mục nhập kho khóa, SecretKeyEntry đối tượng, một đối tượng ProtectionParameter và lưu trữ mục nhập dưới bí danh đã cho.
Đặt mục nhập vào kho khóa bằng cách sử dụng setEntry() như hình dưới đây.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Bước 7: Tạo đối tượng KeyStore.SecretKeyEntry
Các getEntry() phương thức của lớp KeyStore chấp nhận một bí danh (tham số Chuỗi) và, một đối tượng của lớp ProtectionParameter làm tham số và trả về KeyStoreEntry đối tượng thì bạn có thể truyền nó vào KeyStore.SecretKeyEntry vật.
Tạo một đối tượng của lớp KeyStore.SecretKeyEntry bằng cách chuyển bí danh cho khóa bắt buộc và đối tượng tham số bảo vệ đã tạo trong các bước trước, cho getEntry() như hình dưới đây.
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
Bước 8: Tạo đối tượng chính của mục nhập đã truy xuất
Các getSecretKey() phương pháp của SecretKeyEntrylớp trả về một đối tượng SecretKey. Sử dụng phương pháp này tạo một đối tượng SecretKey như hình dưới đây.
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
Thí dụ
Ví dụ sau đây cho thấy cách lấy khóa từ kho khóa. Ở đây, chúng tôi lưu trữ một khóa trong kho khóa, trong tệp “cacerts” (hệ điều hành windows 10), truy xuất nó và hiển thị một số thuộc tính của nó, chẳng hạn như thuật toán được sử dụng để tạo khóa và định dạng của khóa đã truy xuất.
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());
}
}
Đầu ra
Chương trình trên tạo ra kết quả sau:
Algorithm used to generate key: DSA
Format of the key: RAW