最近项目对接第三方时,遇到一个SM2解密问题,拿到第三方的密文后解密失败。首先想到C1C2C3 和C1C3C2的问题,于是......,半个小时后,决定要来第三方的sdk。
发现他们sdk依赖的jar是1.46版本,而我的项目依赖的是1.64。
org.bouncycastle bcprov-jdk15on 1.46 要降版本吗?想到不要想,降版本会导致现有的许多方法都要重写,还要重新测试,这代价我可接受不了,还是问问度娘别人是否遇到过同样的问题吧。
最终maven-shade-plugin 插件浮现在眼前,它可以对依赖的jar包的类路径进行修改。而1.64 和1.46 两个版本冲突,就是因为同一个类在不同的版本中使用方式不同,那么我只有改变其中一个jar包的类路径,同时依赖两个包不就可以了吗。
抱着试一试的态度:
pom.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?> 4.0.0 cloneli.bouncycastle bcprov-jdk15on 1.46 org.bouncycastle bcprov-jdk15on 1.46 third sm-sdk 1.0 org.apache.maven.plugins maven-shade-plugin 3.2.1 false package shade org.bouncycastle cloneli.bouncycastle *:* META-INF/*.SF META-INF/*.DSA META-INF/*.RSA META-INF/services/* META-INF/versions/* 其中dependencies 中 sm-sdk 是第三方提供的工具,它依赖的就是bcprov-jdk15on 1.46版本,我要做就是将这两个包中的org.bouncycastle.xxx进行修改,关键配置如下:
org.bouncycastle cloneli.bouncycastle install后在本地仓库中就生成了一个新的jar。然后可以在项目的pom.xml中加上下面的坐标,导入后,点开这个jar,会发现其内容就是sm-sdk 和 bcprov-jdk15on 的class文件,但是相关的类路径都已经变成了cloneli.bouncycastle.xxx
cloneli.bouncycastle bcprov-jdk15on 1.46 本地测试,看到了想要的结果,1.64 和1.46 和谐共处。
到这里还没有结束,不要忘记将新的jar上传公司的服务器,不然其他同事拿不到这个包。
这里 maven-shade-plugin 插件单纯看效果,就和我们把 sm-sdk 和 bcprov-jdk15on 中的所有类都复制到自己的项目中重写了一样,既然都重写了,改个类路径不是很合理吗?
| 留言与评论(共有 0 条评论) “” |