【国密SM2】加密报错:java.security.spec.InvalidKeySpecException: encoded key spec not recognised
在Linux系统中,处理Java下单参数加密时遇到java.security.spec.InvalidKeySpecException: encodedkeyspecnotrecognised错误,可以通过以下步骤解决:首先,在JDK的/jdk/jre/lib/security目录下的java.security文件中添加security.provider.10=org.bouncycastle.j
背景介绍
linux中下单参数加密报错:
java.security.spec.InvalidKeySpecException: encoded key spec not recognised
解决方法:
解决java.security.spec.InvalidKeySpecException: encoded key spec not recognised:
第一步:在 jdk的 /jdk/jre/lib/security这个目录下,java.security 这个文件增加配置:ecurity.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
//添加下面这行
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
第二步:将jar包 bcprov-jdk15to18-1.66.jar 放到jdk的 /jdk/jre/lib/ext 这个目录下。
重启程序,下单加密参数成功!
个人猜测是因为程序中存在其他的支付加密jar包,导致冲突了,因为再本地运行没有问题,在测试的linux重新部署了一个测试的也没有问题,只有再liunx生成环境中报错了。
其他踩坑:
1、jdk8版本要使用bcprov-jdk15to18的包,版本更具需要来,1.66及以下的版本如图所示,该方法是公共,1.66以上的私有的不能引用,我这里用的是1.66版本,如果有版本冲突要解决
bcprov-jdk15to18的依赖:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.66</version>
</dependency>
bcprov-jdk15to18的解决冲突参考依赖:
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
<version>1.66</version>
</dependency>
更多推荐
所有评论(0)