====== 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)); } }