Java 암호화-키 저장

사용 / 생성 된 키 및 인증서는 키 저장소라는 데이터베이스에 저장됩니다. 기본적으로이 데이터베이스는 다음과 같은 파일에 저장됩니다..keystore.

다음을 사용하여이 데이터베이스의 내용에 액세스 할 수 있습니다. KeyStore 의 클래스 java.security꾸러미. 이것은 PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry의 세 가지 항목을 관리합니다.

  • PrivateKeyEntry
  • SecretKeyEntry
  • TrustedCertificateEntry

키 저장소에 키 저장

이 섹션에서는 키 저장소에 키를 저장하는 방법을 배웁니다. 키 저장소에 키를 저장하려면 아래 단계를 따르십시오.

1 단계 : KeyStore 객체 생성

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

다음을 사용하여 KeyStore 클래스의 객체를 만듭니다. getInstance() 방법은 아래와 같습니다.

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

2 단계 : KeyStore 개체로드

그만큼 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);

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");