简单的前言描述
由于公司即将需要对接香港永隆银行的生活商城平台(公司业务场景: 将嵌入永隆银行APP里拉起相对应的接口功能),对方已经直接发交互文档API,但是在阅读过程中,发现在调起对方的支付接口时,发现对方要求请求参数中(订单明细参数使用的是ASE256(加密的数据)算法进行加密传输,签名数据参数使用的是RSA2048和SHA256算法进行双重加密传输)。具体请求参数如下图:

重点
老规矩直接上代码,了解了人家上述接口交互需要加密数据传输后,接下来就得写相对应的加密算法工具类(坑来了。。。),先准备AES256Util算法工具类(具体的代码,可以直接下载附件)

本以为完全ok,结果运行结果GG了直接报错,具体错误信息如下图:
javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2202)
at com.usys.common.core.util.AES256Util.decrypt(AES256Util.java:66)
at com.usys.common.core.util.AES256Util.main(AES256Util.java:121)
尴尬,直接报类似并发问题,以为是自己本身代码出问题了排查了很久,经过一番度娘和Google上查阅之后,网上的说法挺多的,有的说是公钥或者私钥配置错了,有的说是并发问题导致(但我这是单实例测试工具类,直接可以排除),最后在Stack Overflow上看到了提示(Stack Overflow 问题剖析)
解决方案
阅读Stack Overflow之后,明白我们需要进行JAVA中JCE策略文件替换了(因为某些国家的进口管制限制,Java发布的运行环境包中的加解密有一定的限制。比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件),在JAVA中,默认支持AES128,如果要使用AES256,还需要替换一下以下两个文件(local_policy.jar 和 US_export_policy.jar)即可,这两个文件附件中都有,可以无需再重新下载。
替换方法:
**直接在您安装的JDK路径下 %JDK_HOME%\jre\lib\security 替换掉这两个jar包。**
替换之后重新运行就ok了,结果如图:
总结
以上代码和jar包,请点击这里进行下载(https://download.csdn.net/download/weixin_37838171/12074652)。自己工作中不小心踩得坑总结一下,需要可以帮助到各位小伙伴,一起避坑,上面不足的,也希望大家一起指出,一起学习嘻嘻。
版权声明:本文为weixin_37838171原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。