【发布时间】:2019-08-06 08:24:00
【问题描述】:
我正在使用 Jasypt 来加密和解密属性文件中的敏感数据。
我开始注意到IllegalBlockSizeException。我更新了 jasypt 代码以确定实际错误是什么(默认情况下,jasypt 会屏蔽 Error 并抛出 org.jasypt.exceptions.EncryptionOperationNotPossibleException)
加密和解密在我的开发机器上运行良好。当我复制本地或使用 Jenkins 构建的 jar 时,我看到了这个错误。
我使用的本地JDK版本是:
λ java -version
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
这是我们在服务器上的 jdk 版本(我尝试了多个版本并得到相同的错误)
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b26, mixed mode)
和
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
日志中的异常:
盐大小字节=[8] 加密消息长度=[21] javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是 8 的倍数 在 com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:936) 在 com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:847) 在 com.sun.crypto.provider.PKCS12PBECipherCore.implDoFinal(PKCS12PBECipherCore.java:399) 在 com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(PKCS12PBECipherCore.java:431) 在 javax.crypto.Cipher.doFinal(Cipher.java:2164) 在 org.jasypt.encryption.pbe.StandardPBEByteEncryptor.decrypt(StandardPBEByteEncryptor.java:1041) 在 org.jasypt.encryption.pbe.StandardPBEStringEncryptor.decrypt(StandardPBEStringEncryptor.java:725)
我编写了一个测试实用程序并在服务器上编译它并运行测试以加密和解密,它们工作正常。这意味着 JRE 中的策略不是问题。
谢谢 satesh
【问题讨论】:
标签: java jasypt java-security