2014-01-10 2 views
0

Java에서 암호화를 배우기 때문에 대칭 키 (AES 및 3DES) 암호화를 사용하여 클라이언트 서버 프로그램을 만들기 시작했습니다. 내 데이터베이스에 BLOB로 비밀 키와 초기화 벡터를 저장합니다. 나는 2 개의 다른 문자열에 대해 암호화를 사용한다. 성공적으로 키를 저장할 수 있고 iv를 BLOB로 저장할 수 있지만 두 번째 문자열 AES 키에 문제가있어 나머지 키는 문제가 없습니다.Java를 사용하여 MySQL에서 다중 Blob 검색

문자열 1 :

AES 256 키 - 저장 및 검색 할 수 있습니다. AES 256 IV - 저장 및 검색 할 수 있습니다.

3DES 키 - 저장 및 검색 할 수 있습니다. 3DES IV - 저장 및 검색 할 수 있습니다.

문자열 2 :

AES 256 키 - 저장 될 수 있지만, 검색 할 수 있지만 암호 해독 키를 사용할 수 없습니다입니다. AES 256 IV - 저장 및 검색 할 수 있습니다.

3DES 키 - 저장 및 검색 할 수 있습니다. 3DES IV - 저장 및 검색 할 수 있습니다.

스택 추적은 다음과 같습니다 :

java.security.InvalidKeyException: Illegal key size 
at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1024) 
at javax.crypto.Cipher.implInit(Cipher.java:790) 
at javax.crypto.Cipher.chooseProvider(Cipher.java:849) 
at javax.crypto.Cipher.init(Cipher.java:1348) 
at javax.crypto.Cipher.init(Cipher.java:1282) 
at a.AESEncrypt.decrypt(AESEncrypt.java:71) 
at a.Retr1.passwordCheck(Retr1.java:279) 
at a.Msgret1.csecPwdChk(Msgret1.java:244) 
at a.Msgret1.doPost(Msgret1.java:95) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 

나는 암호화하는 32 바이트 키를 사용하지만 해독 할 때이 문제를 얻는다.

은 내가 JCE는 C에 무제한 힘의 정책 파일을 파일 설치 : \ 프로그램 파일 \ 자바 \ jre7 \ lib 디렉토리 \ 보안 내가 내 JDK 1.7 JDK1.6의 JCE 무제한 힘의 정책 파일을 추가 보인다

+0

이 오류는 매우 간단하며 원인은 항상 잘못된 키 크기입니다. 데이터베이스에서 검색 한 데이터의 크기는 얼마입니까? – ntoskrnl

+0

나는 DB에 저장하는 32 Byte BLOB를 가져온다. 검색된 후 크기를 확인한 후 비밀 키 사양으로 이동하고 모든 항목을 32 바이트로 반환합니다. – Joker

답변

0

.

이제 jdk7 용 JCE 파일을 다운로드하여 잘 작동합니다.

도움을 주셔서 감사합니다. @ ntoskrnl

+0

참조 http://stackoverflow.com/a/18437016/2424896 – ntoskrnl

관련 문제