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