====== Java JCE(Java Cryptography Extension) ======
====== AES ======
* [[http://www.java2s.com/Tutorial/Java/0490__Security/0040__Advanced-Encryption-Standard.htm|AES Examples]]
===== AES 키 등록시 다음과 같은 오류 발생 =====
Unsupported keysize or algorithm parameters.
혹은,
Illegal key size or default parameters.
이는, 기본 JCE가 128비트만 지원해서 16바이트(128bit) 키만을 사용할 수 있는 상황에서 16바이트보다 큰 키를 사용했을 때 발생한다. 아래 패치를 통해 256비트까지 확장해서 32바이트 키를 사용할 수 있게 한다.
* AES 128bit : 16bit 키 지원
* AES 256bit : 32bit 키 지원
다음 파일을 받아서 ''$JAVA_HOME/jre/lib/security''의 파일을 덮어쓴다.
* [[http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html|for Java 7]]
* [[http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html|for Java 6]]
* [[http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR|for Java 4]]
* [[http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#7503-jce-1.4.2-oth-JPR|for Java 1.4.2]]
===== AES 키 생성 =====
* http://www.java2s.com/Tutorial/Java/0490__Security/AESKeygenerator.htm 참조
다음과 같이 AES 256bit 키를 생성하였다. 128bit로 생성하려면 256 대신 128을 사용한다.
[[http://commons.apache.org/codec/|Apache Commons Codec]]의 Base64가 필요하다.
import java.security.Key;
import javax.crypto.KeyGenerator;
import org.apache.commons.codec.binary.Base64;
public class AESKeyGenerator {
public static void main(String[] args) throws Exception {
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(256);
Key key = generator.generateKey();
byte[] keyBytes = key.getEncoded();
String base64EncodedKey = Base64.encodeBase64URLSafeString(keyBytes);
System.out.println(String.format("Key : %s Length : %d", base64EncodedKey, keyBytes.length));
}
}