微信支付开人员是不是有毛病,弄了这么一个大坑给我们,也不知道为什么微信支付退款这个步骤需要解密,为什么支付不需要解密?(难道退款会被冒充,支付就不会了?)解密也就算了,弄这么复杂干什么啊,弄一个技术限制的解密方法,还是开发的这个功能的人脑子有毛病啊,真他妈啥毕啊。
微信支付退款解密具体方法如下:
String descrypt(String reqInfo) {
byte[] reqInfoB = Base64.decodeBase64(reqInfo);
String key="微信key";
String key_ = DigestUtils.md5Hex(key).toLowerCase();
if (Security.getProvider("BC") == null){
Security.addProvider(new BouncyCastleProvider());
}
Cipher cipher;
try {
cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
}catch ( NoSuchAlgorithmException |NoSuchProviderException|NoSuchPaddingException e){
e.printStackTrace();
throw new RuntimeException("秘密获取失败");
}
SecretKeySpec secretKeySpec = new SecretKeySpec(key_.getBytes(), "AES");
try {
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
}catch (InvalidKeyException ie){
ie.printStackTrace();
throw new RuntimeException("秘密初始化失败");
}
try {
return new String(cipher.doFinal(reqInfoB));
}catch (BadPaddingException| IllegalBlockSizeException ie){
ie.printStackTrace();
throw new RuntimeException("秘密初始化失败");
}
}
上述过程之后在本地运行没问题了,但是放到 linux服务器就会解析失败:
java.security.InvalidKeyException: Illegal key size or default parameters(有可能会报这个错误,也有可能什么都不会报)
JAVA实现“AES/ECB/PKCS7Padding”对称加解密,尤其是 AES256的加解密需要注意两点:
- 技术出口限制,国内的JDK 默认不支持;
- JDK默认不支持PKCS7Padding填充模式,需借助第三方提供者。
解决出口限制问题,下载以下两个包(local_policy.jar,US_export_policy.jar)替换jdk安装路径下: jre\lib\security 的同名文件
5.1.下载
需要注意的是:替换的jar包版本需要与jre版本一致,各个版本包连接
jdk8:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
jdk7:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
jdk6:http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
jdk5:http://download.csdn.net/detail/scs2043/4237335
5.2.替换路径
%JAVE_HOME%\jre\lib\security
最后,微信开人员真是牛啊,怕我们太好写程序了,故意弄一点坑给我们跳啊!!!!!!
不可能都去改jdk的jar包吧,20多个服务器呢,大佬给吱吱招
这个解密设定真的狗。。。。我也被折腾了一天,幸亏搜到这位老哥的帖子。
微信 支付宝 等支付方式都可以帮忙申请接入哦 我们属于微信 支付宝的服务商 也和很多持牌三方支付公司和银行合作的 需要的朋友欢迎咨询 遇到任何支付限额 关闭交易权限问题也可以咨询 赵18320304957