본문 바로가기

Dev Story/dev

[java] java.security.InvalidKeyException: Illegal key size or default parameters

JCA(Java Cryptography Architecture)를 사용하여 암호화/복호화를 구현하려고 한다.





다음 조건과 같은 개발 환경으로 진행하였다.

  • JDK Version : JAVA SE 1.7.x
  • Crypto Algorithm : AES 256bit


그런데 아래와 같은 오류가 발생하였다.


java.security.InvalidKeyException: Illegal key size or default parameters
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1011)
at javax.crypto.Cipher.implInit(Cipher.java:786)
at javax.crypto.Cipher.chooseProvider(Cipher.java:849)
at javax.crypto.Cipher.init(Cipher.java:1213)
at javax.crypto.Cipher.init(Cipher.java:1153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)

구글링을 통해 포스팅된 내용을 보니 AES의 Maximum Keysize가 128bit이기 때문이라고 한다.
정책상 길이가 제한이 걸려있다고 하는데 다음은 암호화 알고리즘별 Maximum Keysize이다.

AlgorithmMaximum Keysize
DES64
DESede*
RC2128
RC4128
RC5128
RSA*
all others

128





그럼 256bit를 사용하기 위해서는 JCE(Java Cryptography Extension)를 설치해주면 되는데...




1. 먼저 아래경로에서 정책파일을 다운로드한다.
  • JDK 6 : http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
  • JDK 7 : http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

2. 다운로드된 파일(UnlimitedJCEPolicyJDKx.zip)의 압축을 풀어 local_policy.jar, US_export_policy.jar 를  
JDK가 설치된 디렉토리의 \jre\bin\security\ 에 넣어준다. (기존 파일은 백업을 받아놓는게 좋을 것 같다.)

3. 끝



Reference