升级Bouncy Castle到bcprov-jdk15on-1.66后DEREncodable类找不到如何解决
报错根因
Bouncy Castle从1.47版本开始对ASN1模块做了重构,移除了老版本的org.bouncycastle.asn1.DEREncodable类,该类的功能已经被org.bouncycastle.asn1.ASN1Encodable接口完全替代,你升级到1.66版本后找不到该类属于版本间API不兼容的正常现象。
修复步骤
- 替换导入引用:将代码中所有
import org.bouncycastle.asn1.DEREncodable;语句全量替换为import org.bouncycastle.asn1.ASN1Encodable; - 调整类型声明:所有变量、方法参数、返回值中声明为
DEREncodable的类型,统一替换为ASN1Encodable - 适配方法调用:原有调用
DEREncodable.getDEREncoded()获取编码的逻辑,替换为ASN1Encodable.toASN1Primitive().getEncoded("DER") - 适配CMS签名API:你用到的CMS签名相关类
CMSSignedDataGenerator的传参如果包含DEREncodable类型,替换为ASN1Encodable即可,业务签名、验签逻辑不需要修改。
注意事项
如果你的项目用到了CMS相关功能,建议同时引入同版本的bcpkix-jdk15on-1.66.jar包,避免出现其他CMS相关类找不到的问题,同时要清理依赖中所有旧版本的BC相关jar包,避免多版本类冲突。
内容的提问来源于stack exchange,提问作者keku keku
相关产品推荐
相关产品推荐

