Java 암호화-키 검색

이 장에서는 Java Cryptography를 사용하여 키 저장소에서 키를 검색하는 방법을 배웁니다.

키 저장소에서 키를 검색하려면 아래 단계를 따르십시오.

1 단계 : KeyStore 객체 생성

그만큼 getInstance() 의 방법 KeyStore 의 클래스 java.security package는 키 저장소의 유형을 나타내는 문자열 값을 받아들이고 KeyStore 개체를 반환합니다.

아래와 같이이 메서드를 사용하여 KeyStore 클래스의 개체를 만듭니다.

//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");

2 단계 : 키 저장소 개체로드

그만큼 load() KeyStore 클래스의 메소드는 FileInputStream 키 저장소 파일을 나타내는 개체와 키 저장소의 암호를 지정하는 String 매개 변수입니다.

일반적으로 키 저장소는 다음과 같은 파일에 저장됩니다. 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 (인터페이스) Sub 클래스를 인스턴스화하여 개체 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 단계 : 키 저장소에 항목 설정

그만큼 setEntry() 의 방법 KeyStore 클래스는 키 저장소 항목 별칭을 나타내는 String 매개 변수를받습니다. SecretKeyEntry 개체, ProtectionParameter 개체 및 지정된 별칭 아래에 항목을 저장합니다.

다음을 사용하여 항목을 키 저장소로 설정하십시오. setEntry() 방법은 아래와 같습니다.

//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);

7 단계 : KeyStore.SecretKeyEntry 개체 만들기

그만큼 getEntry() KeyStore 클래스의 메서드는 별칭 (String 매개 변수)과 ProtectionParameter 클래스의 개체를 매개 변수로 받아들이고 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