集成测试中的 EncryptionOperationNotPossibleException 但应用程序中没有

EncryptionOperationNotPossibleException in integration tests but not in application

我在 Spring 启动应用程序中使用 Jasypt 和 Bouncycastle。我可以 运行 我的应用程序正常并且加密的内容被添加到数据库中。

但是,当 运行进行单元测试时,我得到:

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine

为什么它适用于我的应用程序而不适用于集成测试(加载与应用程序相同的 spring 配置)?我 运行 使用标准 Oracle Java 1.8.0_66.

来自 IntelliJ IDEA

我正在使用 PBEWithSHA256And256BitAES-CBC-BC 算法。

Java 默认最大强度为 128 位。

您需要的是一组名为 Java 密码学扩展 (JCE) 无限强度管辖策略文件 的文件,目前可在 Java SE download page .该 zip 文件包含几个策略 jar,您需要将其复制到 JRE 的 {java.home}/jre/lib/security 目录中已有的那些之上。

这将使您可以将密钥强度更改为 128 位以上

更新

对于Java8,这将取决于类路径。如果存在 JCE jar(local_policy.jarUS_export_policy.jar)之一,则启用 JCE 无限加密。也许 Spring Boot 应用程序已实现此依赖关系,但您的测试没有。

可以找到 Java 8 的 JCE jar here