KeyFactory
KeyFactory (키 팩토리)
키(불투명한 암호 키, Key)를 키 명세(기저 키 자료의 투명 표현, KeySpec)로 변환하거나 그 반대로 변환하는 데 사용하는 클래스입니다. 키 팩토리는 양방향으로 동작합니다.
본문
KeyFactory는 키 명세에서 불투명한 키 객체를 만들거나, 키 객체의 기저 키 자료를 적절한 형식으로 꺼내는 역할을 합니다. 같은 키에 대해 호환되는 키 명세가 여럿 존재할 수 있습니다. 예를 들어 DSA 공개 키는 DSAPublicKeySpec이나 X509EncodedKeySpec으로 명시될 수 있으며, 키 팩토리는 호환되는 키 명세 사이를 변환해줍니다.
사용 예를 들어보면, Bob이 인코딩된 공개 키와 디지털 서명을 보냈을 때 Alice는 다음과 같이 서명을 검증할 수 있습니다.
X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
Signature sig = Signature.getInstance("DSA");
sig.initVerify(bobPubKey);
sig.update(data);
sig.verify(signature);
Java 플랫폼의 모든 구현은 DiffieHellman, DSA, RSA 표준 KeyFactory 알고리즘을 지원해야 합니다. 이 알고리즘들은 Java Security Standard Algorithm Names 명세의 KeyFactory 섹션에 설명되어 있습니다.
KeyFactory가 제공하는 주요 메서드는 다음과 같습니다.
public static KeyFactory getInstance(String algorithm)— 지정된 알고리즘의 키를 변환할KeyFactory객체를 반환합니다. 등록된 보안 프로바이더 목록을 가장 선호하는 프로바이더부터 탐색합니다.public static KeyFactory getInstance(String algorithm, String provider)— 지정된 프로바이더에서 알고리즘을 지원하는KeyFactory를 반환합니다.public static KeyFactory getInstance(String algorithm, Provider provider)— 주어진Provider객체를 사용해KeyFactory를 반환합니다.public final Provider getProvider()— 이 키 팩토리 객체의 프로바이더를 반환합니다.public final String getAlgorithm()— 이KeyFactory와 연관된 알고리즘의 이름을 가져옵니다.public final PublicKey generatePublic(KeySpec keySpec)— 제공된 키 명세(키 자료)로부터 공개 키 객체를 생성합니다.public final PrivateKey generatePrivate(KeySpec keySpec)— 제공된 키 명세(키 자료)로부터 개인 키 객체를 생성합니다.public final <T extends KeySpec> T getKeySpec(Key key, Class<T> keySpec)— 주어진 키 객체의 명세(키 자료)를 반환합니다.keySpec은 키 자료를 반환할 명세 클래스를 나타냅니다.public final Key translateKey(Key key)— 프로바이더를 알 수 없거나 신뢰할 수 없는 키 객체를 이 키 팩토리의 키 객체로 변환합니다.
지정된 알고리즘을 지원하는 프로바이더가 없으면 NoSuchAlgorithmException, 알고리즘이 null이면 NullPointerException이 발생할 수 있습니다.