Tomcat使用bouncycastle加密包进行SM2国密验签失败原因

Posted 谢哥哥blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat使用bouncycastle加密包进行SM2国密验签失败原因相关的知识,希望对你有一定的参考价值。

问题描述:

最近做了一个项目需要和银行对接支付,用到了国密算法SM2。项目环境是SSM+Tomcat8+JDK8的,一开始测试的时候都是使用main方法调用测试的,全部通过测试了。最后变成接口的形式使用Tomcat跑的,使用postman调用接口一直提示验签失败,一开始以为是参数配置错了?后来找了一圈发现都没问题。代码肯定是没问题的,出的问题肯定是在环境上。于是就怀疑是不是tomcat或者jdk版本有问题,两个版本都换了之后,还是验签失败,于是没辙了。。。

原因分析与解决:

找了好久终于通过断点找到了原因!由于tomcat默认编码为GBK,会导致和银行那边的编码对应不上,造成加签过程中算法规则被改变了,只需要在getBytes()中指定编码为UTF-8即可解决,getBytes(“UTF-8”)。此前有试过搭建springboot去验签,结果是成功的,springboot自带的tomcat默认的编码就是UTF-8的了,所以使用tomcat的小伙伴,一定要注意这个坑。。。之前都没想到是编码问题,所以有问题还是要多断点。

以上是关于Tomcat使用bouncycastle加密包进行SM2国密验签失败原因的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat使用bouncycastle加密包进行SM2国密验签失败原因

使用 Bouncycastle 在 Java 中进行格式保留加密 (FPE)

使用 BouncyCastle 不推荐使用的方法进行贝宝按钮加密的 Java 代码 - 如何修复?

C# BouncyCastle RSA 加密和解密

AES对称加密实例

Bouncycastle和PKCS#1 v2.1,使用RSASSA-PSS进行签名并使用带有RSAES-OAEP的AES CBC进行加密