java - EncryptionOperationNotPossibleException 在集成测试中但不在应用程序中

标签 java spring spring-boot bouncycastle jasypt

我在 Spring Boot 应用程序中使用 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 Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 的文件,目前可在 Java SE download page 获取。 。此 zip 文件包含几个策略 jar,您需要将其复制到 JRE 的 {java.home}/jre/lib/security 目录中已有的策略 jar 之上。

这将让您更改 128 位以上的 key 强度

更新

对于 Java 8,它将取决于类路径。如果存在 JCE jar 之一(local_policy.jarUS_export_policy.jar),则启用 JCE 无限制加密。也许 Spring Boot 应用程序满足了这种依赖关系,但您的测试却没有。

可以找到 Java 8 的 JCE jar here

关于java - EncryptionOperationNotPossibleException 在集成测试中但不在应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36316570/

相关文章:

java - 从 List<ListObject> 获取值

Spring ehcache vs Memcached?

java - 努力理解Spring MVC模型和具体的 Controller 方法

java - Spring 启动 : Can I post multiple objects as multiple @RequestParams to a REST service?

spring-boot - 为什么 spring-boot 应用程序中 pom.xml 的第一行显示错误... <?xml version ="1.0"encoding ="UTF-8"?>

java - 无法通过 Intent 附加传递对象数组

java - 如何将经度和纬度转换为点并使用点绘制多边形

spring-boot - 无法在 spring 工具套件中创建 spring 启动项目

java - 如何使用 Contains 忽略大小写

java - 如何在 Spring Boot 中实现循环队列消费者