Exception in thread "main" cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC
时间: 2025-04-17 09:37:37 浏览: 14
### 解决 Java Hutool CryptoException SecurityException JCE 无法认证提供者 BC 的方法
当遇到 `java.lang.SecurityException: JCE cannot authenticate the provider BC` 错误时,这通常意味着 Bouncy Castle (BC) 加密库未能通过 Java Cryptography Extension (JCE) 认证。此问题可能源于未安装无限强度司法策略文件或配置错误。
#### 安装无限强度司法政策文件
对于 JDK 版本低于 9 的情况,需下载并替换默认的有限强度司法政策文件为无限强度版本[^3]:
1. 下载适用于当前 JDK 版本的 **Unlimited Strength Jurisdiction Policy Files**
2. 将下载得到的 jar 文件放置于 `$JAVA_HOME/jre/lib/security/` 目录下覆盖原有文件
#### 配置安全提供者顺序
有时调整 JVM 中的安全提供者的加载顺序可以解决问题。可以通过修改启动参数来实现这一点:
```bash
-Djava.security.manager -Djava.security.policy==<path_to_policy_file>
```
或者编辑 `${JAVA_HOME}/jre/lib/security/java.security` 文件中的 `security.provider.<n>=org.bouncycastle.jce.provider.BouncyCastleProvider` 行号 n 来改变其优先级。
#### 注册 Bouncy Castle Provider
确保应用程序正确注册了 Bouncy Castle 提供程序,在应用初始化阶段加入如下代码片段:
```java
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.Security;
public class Main {
static {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null){
Security.addProvider(new BouncyCastleProvider());
}
}
public static void main(String[] args) {}
}
```
以上措施有助于解决因缺少适当权限而导致的 JCE 和 BC 提供商之间的兼容性问题[^1]。
阅读全文
相关推荐

















