解决bouncycastle版本冲突的问题
一、概述
本人在研究java最新的算法,要用到新版本的bouncycastle,项目中已有的功能依赖不少jar包,搞不清他们是怎么依赖bouncycastle
二、开发平台
操作系统:windows10
eclipse:版本2021-06 (4.20.0)
JDK:版本1.8
三、问题
pom.xml如下添加依赖
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<version>1.83</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.83</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcmls-jdk18on</artifactId>
<version>1.83</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcutil-jdk18on</artifactId>
<version>1.83</version>
</dependency>
编译没问题但运行报错:
Exception in thread “main” java.lang.SecurityException: class “org.bouncycastle.pqc.jcajce.provider.Rainbow$Mappings”'s signer information does not match signer information of other classes in the same package
如下图:

四、分析
1、通过大量网上查阅这个错误,和下面的一系列操作,确定是bouncycastle版本冲突问题
2、在工程的Maven Dependencies里面确实能看到同时依赖两个不同版本的bouncycastle(1.83和1.68),直接删不掉的,如下图
3、查看自动下载保存的jar包,默认保存在目录:C:\Users\Administrator.m2\repository\org\bouncycastle,可以看到有两个包是另外的版本的,即使删了之后重新生成还是这样,如下图:
4、我在pom.xml并没有配置1.68版本的bouncycastle,但是从上面几部操作查看实际上依赖了1.68版本的bouncycastle,这说明是其他包间接依赖了1.68版本的bouncycastle。
本问题解决的核心,找到哪个jar包依赖1.68版本的bouncycastle,并排除掉这个1.68版本依赖,让它依赖新的1.83版本。
五、查找依赖
AI搜索,用这个命令可以实现
mvn dependency:tree
接下来问题是怎么在eclipse上面执行这个命令,项目右键菜单,Run As->Maven build…如下图
弹出的对话框,Goals这个编辑框填:dependency:tree
然后点击Run按钮,如下图:
输出一大堆,包含各种依赖关系,如下图:
在里面搜索bouncycastle,本人复制出来用notepad–搜索,注意到1.68版本的地方,如下:
可以看出来,poi-ooxml-5.0.0.jar依赖bouncycastle 1.68版本
四、问题解决
在pom.xml找到如下依赖配置
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
将bouncycastle 1.68版本的模块依赖排除掉,改为如下
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
<exclusions>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
</exclusion>
<exclusion>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
</exclusion>
</exclusions>
</dependency>
将项目生成目标文件的文件夹target删除,重新生成一下就好了。
五、小结
本文首先确定是bouncycastle版本冲突,然后通过命令查看依赖关系,对依赖低版本的包排除掉,从而解决问题。
如果这一步还是没有解决,还有一种方法就是把新版本bouncycastle包重命名,在我的工程里面需要修改的太多,已经解决就不继续这样做了。
更多推荐




所有评论(0)