【问题标题】:Multiple Blob retrieval from MySQL using java使用 java 从 MySQL 中检索多个 Blob
【发布时间】:2014-01-10 10:27:35
【问题描述】:

我正在学习 java 中的加密,所以我开始使用对称密钥(AES 和 3DES)加密制作客户端服务器程序。我将密钥和初始化向量作为 BLOB 存储在我的数据库中。我对 2 个不同的字符串使用加密。我可以成功地将密钥和 iv 存储为 BLOB,但是当我检索它们时,我遇到了第二个字符串 AES 密钥的问题,其余的东西都很好。

字符串 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 文件 Unlimited Strength Policy 文件安装到 C:\Program Files\Java\jre7\lib\security

【问题讨论】:

  • 这个错误相当简单,原因总是不正确的密钥大小。从数据库中检索到的数据大小是多少?
  • 我检索了存储在 db 中的 32 字节 blob。我在检索到它之后检查了它的大小,在它进入密钥规范之前以及我可以的所有地方,但都返回 32 个字节

标签: java mysql encryption cryptography encryption-symmetric


【解决方案1】:

看来我在我的 jdk 1.7 中添加了 jdk1.6 的 JCE Unlimited Strength Policy 文件。

现在我下载了 jdk7 的 JCE 文件,它工作正常。

感谢@ntoskrnl 的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多