解密步骤如下:

(1)对加密串A做base64解码,得到加密串B

(2)对商户key做md5,得到32位小写key* ( key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 )

(3)用key*对加密串B做AES-256-ECB解密(PKCS7Padding)

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk16</artifactId>
<version>1.45</version>
</dependency>
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.MessageDigest;
import java.security.Security;
import java.util.Base64; public class AESUtil { /**
* 密钥算法
*/
private static final String ALGORITHM = "AES";
/**
* 加解密算法/工作模式/填充方式
*/
private static final String ALGORITHM_MODE_PADDING = "AES/ECB/PKCS7Padding"; /**
* AES解密
*
* @param base64Data
* @return
* @throws Exception
*/
public static String decryptData(String base64Data,String lowMad5Key) throws Exception {
SecretKeySpec key = new SecretKeySpec(lowMad5Key.getBytes(), ALGORITHM);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance(ALGORITHM_MODE_PADDING);
cipher.init(Cipher.DECRYPT_MODE, key);
Base64.Decoder decoder = Base64.getDecoder();
String newData= new String(decoder.decode(base64Data), "ISO-8859-1");
return new String(cipher.doFinal(newData.getBytes("ISO-8859-1")), "utf-8");
}
public static String MD5(String data) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
byte[] var4 = array;
int var5 = array.length; for(int var6 = 0; var6 < var5; ++var6) {
byte item = var4[var6];
sb.append(Integer.toHexString(item & 255 | 256).substring(1, 3));
} return sb.toString().toUpperCase();
} public static void main(String[] args) throws Exception {
String a = "0KC5hoCVPyMaxOn5AfQpKjE1Z6Jm6PWI7uCnpCGZXy05YaqOuJXPeMwG6tMvcxwfJOe6u4vKyVZggcwmN0wI2y3CMYG6Z2uS4nluG1Aa/F5ctXurcNH9aGajo3D4Kx/J6hN7/p0IoInVl8gePBzjC5eRxC66ju2W+OaSOlDHT68yrkqeatfcYgjkYk6RGClMvKnl0mM6Nllwr9Bi6ca2vDNqA6TKIq52zu7o0/TBxRctpG4hnfssaQWhGQVMu50arWPyU+6f0aJ/GkJ21nJE/vD5NrjaKWxAOtRpHUWRkvOuUGsA2cx5snrZlRdtRNpAgs72RtoCGjp7IZx4mW88SdcIFG1DEgkzQe+IoVPWf3uAdS+ijbQ6xb7WFoHBrNzBJz84UZjN/tRIqA4qWv8ixIzQ4XUN7REBA4onBCeh/U7FckSuxmkIo8YcNDIrZoJs5KSuymQx6yxZ+Ik5TkGUP6KZZEhkICKy9nK6Tx/Nug2OgxKOhfCivIXe0hrbLd70IqWtypm4PDV8u6YB+uajtNrZY0r5166UZVFWYtn7eOj8OF2PqvWggsK82Mf+R2FykTH0p9NrnoR34h2eNrY4qtbi/J6MrJIGy54Ijuq9ywzV4CFSkJpqWyTezDOtPBJuD9qVNFVXavGYVpWEYGfxNwWYNJVlbNz9iXhWrKLdma4b6VYBJggQnkE53SLlXDuSt9o3BEPYkeWU1WTUhTLyZQosS527QbsigDaiM5Bn4C6Vp7un8Kz2A9j1VmAYV6SyxVivzTe83/2bU8WAORu8wCAfjCk9d9r0AeothIyiagZe9MAFBI9AiGEs5vnrmRgLRYHY7dg4DlpFzBKKucMGFLVLYu/olovrQ6cIfpqB2i7NArunn15Uu62MMhrAicZHUpp72OXT64u4VdOS15kiN8a8q7PjoP13r8IjaWQP9XR9ivAdThYDBbvJaGsCN8qduwa4ndwp7m/GG0c9V1SFo4nAlhI9RCAYkA+eoKIwtmROcgHZBXieOeNF/G3bIHmBAL5uPo2xZqyrvMpTice2lA==";
String ab = AESUtil.decryptData(a,AESUtil.MD5("4567qwer53321ty444rewq87656uyt").toLowerCase());
System.out.println(ab);
} 结果:
======================================== <root>
<out_refund_no><![CDATA[23003134]]></out_refund_no>
<out_trade_no><![CDATA[23003125]]></out_trade_no>
<refund_account><![CDATA[REFUND_SOURCE_RECHARGE_FUNDS]]></refund_account>
<refund_fee><![CDATA[10]]></refund_fee>
<refund_id><![CDATA[240000209102018121407497402648]]></refund_id>
<refund_recv_accout><![CDATA[支付用户零钱]]></refund_recv_accout>
<refund_request_source><![CDATA[API]]></refund_request_source>
<refund_status><![CDATA[SUCCESS]]></refund_status>
<settlement_refund_fee><![CDATA[10]]></settlement_refund_fee>
<settlement_total_fee><![CDATA[11]]></settlement_total_fee>
<success_time><![CDATA[2018-12-14 11:25:58]]></success_time>
<total_fee><![CDATA[11]]></total_fee>
<transaction_id><![CDATA[3200000234201812136388015826]]></transaction_id>
</root> 问题汇总:

Cannot find any provider supporting AES/ECB/PKCS7Padding

增加Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

javax.crypto.BadPaddingException: pad block corrupted

秘钥不正确

 

微信退款回调AES算法(AES-256-ECB)的更多相关文章

  1. Delphi与JAVA互加解密AES算法

    搞了半天终于把这个对应的参数搞上了,话不多说,先干上代码: package com.bss.util; import java.io.UnsupportedEncodingException; imp ...

  2. AES算法简介

    AES算法简介 一. AES的结构 1.总体结构 明文分组的长度为128位即16字节,密钥长度可以为16,24或者32字节(128,192,256位).根据密钥的长度,算法被称为AES-128,AES ...

  3. AES算法,DES算法,RSA算法JAVA实现

    1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  4. 密码学之DES/AES算法

    本文示例代码详见:https://github.com/52fhy/crypt-demo DES DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算 ...

  5. #微码分享#AES算法的C++包装类

    AES为Advanced Encryption Standard的缩写,中文名:高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替代DES.基于std:: ...

  6. 常见的加密和解密算法—AES

    一.AES加密概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用 ...

  7. 【微信小程序】退款功能教程(含申请退款和退款回调)

    1.一定要区分小程序和公众号的退款,唯一的区别就是 appid不一样,其他的都是一样的. 不废话,直接写代码了啊. 放大招!!! 然后,需要注意的:最好是把证书放在下面的php的同级或者下级. 证书的 ...

  8. 【复习】密码算法——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...

  9. 分组密码(四)AES算法① — 密码学复习(七)

    介绍完S-PN型结构之后,下面介绍AES算法.由于内容比较多所以将其分为两篇来介绍,本篇主要讲AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础. 7.1 AES的历史时 ...

随机推荐

  1. kafka consumer 配置详解

    1.Consumer Group 与 topic 订阅 每个Consumer 进程都会划归到一个逻辑的Consumer Group中,逻辑的订阅者是Consumer Group.所以一条message ...

  2. Jenkins 配置邮件通知步骤

    Jenkins 配置邮件通知前言 可以在Jenkins 中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题. Jenkins 邮件通知功能的插件主要包括: Mailer Plugin ( ...

  3. vue 简单实现父组件向子组件传值,简单来说就是子组件肆意妄为的调用父组件里后台返回的值

    首先在于父子组件传值的方法很多,本人在这里只是简单描述一下一个组件里面引用了子组件,那么子组件如何才能获取父组件中后台返回的值呢? 首先调用组件相信大家都应该明白了(不明白的自己撸撸文档), < ...

  4. 使用 Laragon 在 Windows 中快速搭建 Laravel 本地开发环境 (转)

    laravel学院 简介 对于那些使用 Windows 操作系统的同学来说,Homestead 和 LaraDock 虽说支持 Windows 系统,但是对初学者来说,安装配置起来还是有一定复杂度的, ...

  5. linux基础命令touch

    touch /home/ceshi    创建文件命令 touch    /home/ceshi1 ceshi2    同时创建两个文件. cat   显示文件内容(短的文件) -n  带行号 tac ...

  6. redist命令操作(二)--哈希Hash,列表List

    1.Redis 哈希(Hash) 参考菜鸟教程:http://www.runoob.com/redis/redis-hashes.html Redis hash 是一个string类型的field和v ...

  7. 搭建iview环境

    一.最快捷方式安装: $ npm install iview --save 二.一般在 webpack 入口页面 main.js 中如下配置: import Vue from 'vue'; impor ...

  8. python 做接口自动化测试框架设计

    1,明确什么叫自动化测试,什么叫接口自动化测试,如何设计接口测试用例,已登录为例 自动化测试:解放人力来自动完成规定的测试. 自动化测试分层模型:UI层,不论WEB端还是移动端,都是基于页面元素的识别 ...

  9. vue整理

    安装 vue ui axios import axios from 'axios' // let curWwwPath = window.document.location.href // let p ...

  10. 【转载】MessageFormat.format方法

    MessageFormat.format方法实例 public static void main(String[] args) { String a= "aaa"; String ...