【复盘】记录一次加解密包遇到的坑,tried to access method org.bouncycastle.math

问题背景

因为本身自己是做借贷业务的,主要和各种银行进行合作 系统层面的交互,最近在接入一个新的银行的时候,他们自己本身有一套自己的加解密包让我们来使用,所以就直接用他们的加解密。其中他们自定义的包中依赖的一个加解密包是 bcprov-jdk15on 1.46 版本 (bcprov-jdk16-1.46.jar),但是我们现有项目中引用的有其他版本的包,直接将加密包引入发现不能使用。

现有项目包含的加解密包
bcprov-jdk15on-1.49.jar
bcprov-jdk15on-1.62.jar
bcprov-jdk15on-1.68.jar
bcprov-jdk15to18-1.68.jar

 Exception in thread "main" java.lang.IllegalAccessError: 
 tried to access method org.bouncycastle.math.ec.ECPoint$Fp.<init>
 (Lorg/bouncycastle/math/ec/ECCurve;Lorg/bouncycastle/math/ec/ECFieldElement;
 Lorg/bouncycastle/math/ec/ECFieldElement;)V from class SM2Utils.SM2 at SM2Utils.SM2.<init>(SM2.java:51) at SM2Utils.SM2.Instance(SM2.java:36) at SM2Utils.SM2SignUtils.sign(SM2SignUtils.java:120) at EncryptUtils.EncryptUtils.encryptText(EncryptUtils.java:22) at

字面意思上是无法访问这个类的方法,debug后发现这个方法是私有的,而且引用的包的版本是现有项目中的高版本,考虑到一个重要点为了不影响别的流程使用,我不能使用低版本直接替换高版本,因为可能会对其他流程加解密造成错误。所以我的目的就是在不从高版本降低到低版本。

解决问题思路

在明确了第一个前提下,我尝试将低版本取消,但是也报错了。


错误信息:java.lang.SecurityException: class "org.bouncycastle.asn1.DEREncodable"'
s signer information does not match signer information of other classes in the same package

可见还是类加载的时候 加载到相同的类在相同的包下。
最后没有版本,找了一个大佬,大佬说你可以自己重新写一套加解密,把对方给的低版本重写升级高版本,但是在难免有写类会出现不兼容,可以上网找找对应的升级类是什么,试一下。

解决方案

接着 按照上述思路,进行重写,然后就可以使用了。

解决方案2

【复盘】bcprov-jdk16包冲突问题(不同版本jar兼容) 以及 maven-shade-plugin的使用

总结

1.这个问题差不多费了我一周的时间 都在解决,比较坑,所以记录一下。
2.类比框架,一个jar包的升级,也必然是有新事物替换旧事物,可以利用新类将旧类进行替换,重写jar包。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qxlxi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值