2014-01-10 46 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:\ Program Files文件\的Java \ jre7 \ lib \ security中

+0

這個錯誤是相當直接的,原因總是不正確的密鑰大小。從數據庫中檢索的數據的大小是多少? – ntoskrnl

+0

我檢索我存儲在數據庫中的32字節blob。我檢查了檢索後的大小,然後它進入密鑰規範和每個我可以但所有返回32個字節 – Joker

回答

0

看來我添加JDK1.6的JCE無限強度政策文件,以我的JDK 1.7。

現在我下載JCE文件爲jdk7其工作正常。

感謝@ntoskrnl的幫助

+0

請參閱http://stackoverflow.com/a/18437016/2424896 – ntoskrnl