Java Cryptography - การเรียกค้นคีย์
ในบทนี้เราจะเรียนรู้วิธีการดึงคีย์จากที่เก็บคีย์โดยใช้ Java Cryptography
ในการดึงคีย์จากที่เก็บคีย์ให้ทำตามขั้นตอนที่ระบุด้านล่าง
ขั้นตอนที่ 1: สร้างวัตถุ KeyStore
getInstance() วิธีการของ KeyStore คลาสของ java.security แพ็กเกจยอมรับค่าสตริงที่แสดงถึงชนิดของที่เก็บคีย์และส่งคืนอ็อบเจ็กต์ KeyStore
สร้างออบเจ็กต์ของคลาส KeyStore โดยใช้วิธีนี้ดังที่แสดงด้านล่าง
//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);
ขั้นตอนที่ 7: สร้างวัตถุ KeyStore.SecretKeyEntry
getEntry() เมธอดของคลาส KeyStore ยอมรับนามแฝง (พารามิเตอร์ String) และอ็อบเจ็กต์ของคลาส ProtectionParameter เป็นพารามิเตอร์และส่งกลับ a KeyStoreEntry คุณสามารถโยนมันลงไปได้ KeyStore.SecretKeyEntry วัตถุ.
สร้างอ็อบเจ็กต์ของคลาส KeyStore.SecretKeyEntry โดยส่งนามแฝงสำหรับคีย์ที่ต้องการและอ็อบเจ็กต์พารามิเตอร์การป้องกันที่สร้างขึ้นในขั้นตอนก่อนหน้าไปยัง getEntry() วิธีการดังแสดงด้านล่าง
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
ขั้นตอนที่ 8: สร้างออบเจ็กต์หลักของรายการที่ดึงมา
getSecretKey() วิธีการของ SecretKeyEntryคลาสส่งคืนอ็อบเจ็กต์ SecretKey ใช้วิธีนี้สร้างวัตถุ SecretKey ดังที่แสดงด้านล่าง
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีการดึงคีย์จากที่เก็บคีย์ ที่นี่เราจัดเก็บคีย์ไว้ในที่เก็บคีย์ซึ่งอยู่ในไฟล์ "cacerts" (ระบบปฏิบัติการ windows 10) เรียกดูและแสดงคุณสมบัติบางอย่างของคีย์นั้นเช่นอัลกอริทึมที่ใช้ในการสร้างคีย์และรูปแบบของ คีย์ที่ดึงมา
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());
}
}
เอาต์พุต
โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -
Algorithm used to generate key: DSA
Format of the key: RAW