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