Java Cryptography - การจัดเก็บคีย์
คีย์และใบรับรองที่ใช้ / สร้างขึ้นจะถูกเก็บไว้ในฐานข้อมูลที่เรียกว่าเป็นที่เก็บคีย์ โดยค่าเริ่มต้นฐานข้อมูลนี้จะถูกเก็บไว้ในไฟล์ชื่อ.keystore.
คุณสามารถเข้าถึงเนื้อหาของฐานข้อมูลนี้โดยใช้ไฟล์ KeyStore คลาสของ java.securityแพ็คเกจ สิ่งนี้จัดการสามรายการที่แตกต่างกัน ได้แก่ PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry
- PrivateKeyEntry
- SecretKeyEntry
- TrustedCertificateEntry
การจัดเก็บคีย์ในที่เก็บคีย์
ในส่วนนี้เราจะเรียนรู้วิธีการจัดเก็บคีย์ในที่เก็บคีย์ ในการจัดเก็บคีย์ในที่เก็บคีย์ให้ทำตามขั้นตอนด้านล่าง
ขั้นตอนที่ 1: สร้างวัตถุ KeyStore
getInstance() วิธีการของ KeyStore คลาสของ java.security แพ็กเกจยอมรับค่าสตริงที่แสดงถึงชนิดของที่เก็บคีย์และส่งคืนอ็อบเจ็กต์ KeyStore
สร้างออบเจ็กต์ของคลาส KeyStore โดยใช้ไฟล์ getInstance() วิธีการดังแสดงด้านล่าง
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
ขั้นตอนที่ 2: โหลดวัตถุ KeyStore
load() เมธอดของคลาส KeyStore ยอมรับอ็อบเจ็กต์ FileInputStream ที่เป็นตัวแทนของไฟล์ที่เก็บคีย์และพารามิเตอร์ String ที่ระบุรหัสผ่านของ KeyStore
โดยทั่วไป KeyStore จะถูกเก็บไว้ในไฟล์ชื่อ cacertsในสถานที่ C:/Program Files/Java/jre1.8.0_101/lib/security/ และรหัสผ่านเริ่มต้นคือ changeitโหลดโดยใช้ไฟล์ load() วิธีการดังแสดงด้านล่าง
//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: สร้างวัตถุ KeyStore.ProtectionParameter
เริ่มต้น KeyStore.ProtectionParameter ดังที่แสดงด้านล่าง
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
ขั้นตอนที่ 4: สร้างวัตถุ SecretKey
สร้างไฟล์ SecretKey (อินเทอร์เฟซ) อ็อบเจ็กต์โดยสร้างอินสแตนซ์คลาสย่อย SecretKeySpec. ในขณะที่สร้างอินสแตนซ์คุณต้องส่งรหัสผ่านและอัลกอริทึมเป็นพารามิเตอร์ไปยังตัวสร้างดังที่แสดงด้านล่าง
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
ขั้นตอนที่ 5: สร้างวัตถุ SecretKeyEntry
สร้างวัตถุของไฟล์ SecretKeyEntry คลาสโดยผ่านไฟล์ SecretKey วัตถุที่สร้างในขั้นตอนข้างต้นดังที่แสดงด้านล่าง
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
ขั้นตอนที่ 6: ตั้งค่ารายการไปที่ KeyStore
setEntry() วิธีการของ KeyStore คลาสยอมรับพารามิเตอร์ String ที่แสดงนามแฝงรายการที่เก็บคีย์ a SecretKeyEntry วัตถุวัตถุ ProtectionParameter และเก็บรายการภายใต้นามแฝงที่กำหนด
ตั้งค่ารายการไปยังที่เก็บคีย์โดยใช้ setEntry() วิธีการดังแสดงด้านล่าง
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Example
ตัวอย่างต่อไปนี้เก็บคีย์ไว้ในที่เก็บคีย์ที่มีอยู่ในไฟล์ "cacerts" (ระบบปฏิบัติการ windows 10)
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
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -
System.out.println("data stored");