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