SpringBoot打包后SDK报错cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC有没有什么解决办法?在idea是正常的,打包部署到服务器请求就报这个错误。服务器的jdk是17
该回答引用chatgpt:你本地和服务器jdk版本不一样吗,建议保持一致,这样能方便及时发现问题
您在服务器上部署的 JDK 版本是 JDK 17,而出现 cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC 的原因是 JDK 9+ 默认没有无限制权限策略文件(JCE Policy files)。
为了解决这个问题,您可以尝试以下方法:
1.下载Java Cryptography Extension (JCE) 无限制权限策略文件,解压后将文件放到 $JAVA_HOME/jre/lib/security 目录下,覆盖原有文件。JDK 17 的 JCE 无限制权限策略文件下载地址:JCE 无限制权限策略文件下载。
在您的应用程序中手动添加 BouncyCastle 提供者,可以通过以下代码添加:
import java.security.Security;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
Security.addProvider(new BouncyCastleProvider());
在代码中添加 BouncyCastle 提供者后,您可以在使用 Hutool 进行加密/解密操作时,指定 BouncyCastle 算法实现。例如:
SecureUtil.bouncyCastle("AES/ECB/PKCS7Padding");
如果您的应用程序中有多处使用到加密/解密操作,建议将这些加密/解密操作统一使用 BouncyCastle 提供的算法实现,这样可以保证在不同的 JDK 版本中均可正常工作。