解密步骤如下:

(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

秘钥不正确

 

转载于:https://www.cnblogs.com/kisseveryone/p/10119197.html

微信退款回调AES算法(AES-256-ECB)相关推荐

  1. php微信退款回调通知,微信退款异步回调通知

    以上为微信官方的文档,想要实现微信退款通知处理业务,使用的thinkphp3.2 通过对上述完成 使用php 无论如何对都req_info 无法解密 求大神指导 ,或提供一个dmeo const CI ...

  2. 小程序微信退款(退款信息回调解密)

    一.微信支付(简单贴一下) /** 发起微信支付 */public Map wechatPay(String openid, HttpServletRequest request, String ou ...

  3. 浅析微信支付:申请退款、退款回调接口、查询退款

    本文是[浅析微信支付]系列文章的第八篇,主要讲解商户如何处理微信申请退款.退款回调.查询退款接口,其中有一些坑的地方,会着重强调. 浅析微信支付系列已经更新七篇了哟-,没有看过的朋友们可以看一下哦. ...

  4. java 微信申请退款,退款回调通知,解密,V2版

    下载微信官方提供的SDK,转 https://blog.csdn.net/qq_40506288/article/details/110918650 博客查看下载流程 微信退款说明,官方提供:http ...

  5. aes算法cbc模式c语言,AES算法及它的CBC加密模式

    AES四種加密模式的區別: ECB(Electronic Code Book電子密碼本)模式 ECB模式是最早采用和最簡單的模式,它將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,然后每組都用相 ...

  6. 微信支付退款回调踩坑及解决方案(附解密代码)

    文章目录 1. 回调失败问题(沙箱环境) 2. 解决方案 3. 退款回调的解密代码 1. 回调失败问题(沙箱环境) 问题始末: 最近再弄微信退款回调发现设置的回调的url根本就没有被调用,但是微信支付 ...

  7. Javascript实现AES算法

    JavaScript的加密和解密用的是google的CryptoJS库. 需要下载CryptoJS库,下载地址如下:https://github.com/sytelus/CryptoJS AES算法 ...

  8. 前后台加解密的使用--SHA256算法 RSA算法 AES算法

    SHA256算法 sha256与md5一样是散列算法,不是加密算法,不存在解密的问题,因此是不可逆的,可以通过key+password,对密码进行加密,在后台进行比对,安全性比md5高一点,加密后生成 ...

  9. 微信退款流程实现整理(java)

    前言 此处整理为简便,将所有应用到的方法都整理到了一起,实际开发中尽量将controller,service,mapper,工具类分开.此文章着重注意退款回调,其中应用了数据解密(作者一开始困扰在此处 ...

最新文章

  1. 找工作这几天遇到的骗人套路
  2. 北京奥运会闭幕式落下帷幕
  3. stanford course
  4. 操作系统:电脑的回收站的秘密你知道吗?
  5. 呼叫我或异步REST
  6. keil3如何放大字体_Word技巧之快速放大字体!快来GET新技能!
  7. 【Pyhton】随机漫步散点图
  8. (09)VHDL例化VHDL
  9. C++中main函数中参数argc和argv的使用实例
  10. 蠕虫病毒通过什么侵入计算机系统,注意!蠕虫病毒入侵!我区已有单位个人计算机中招!...
  11. Go语言学习之旅--初识GoLang
  12. 密码学基础之对称密钥的分发和存储
  13. Python3 Scrapy + Selenium + 阿布云爬取拉钩网学习笔记
  14. AlphaStar 实战技巧分析
  15. 设置网页只允许在手机微信浏览器打开
  16. 电脑耳机拔出后,再插入没声音
  17. 动手实现一个跑步小程序
  18. S6系统激活、软件升级和软件授权激活
  19. 推荐系统与深度学习(一)——FM模型原理
  20. winwebmail设置 小记

热门文章

  1. Alibaba Code代码索引技术实践:为Code Review提供本地IDE的阅读体验
  2. 管理人员巡店用表-生鲜部经理及主管每日检查事项
  3. 华为5102路由器虚拟服务器,华为WS5102路由器wifi隐藏后连接方法是什么?
  4. Spark Streaming 对比 Structured Streaming(及其内部的两种模式 MicroBatch Streaming VS Continous Streaming)
  5. 小组取什么名字好_霸气学习小组组名大全
  6. geo数据差异分析_GEO2R:对GEO数据库中的数据进行差异分析
  7. Win10笔记本开热点供移动端连接后电脑无法连网
  8. 肠道重要菌属——颤螺菌属 (Oscillospira),它为什么如此神秘?
  9. IBM X3650服务器使用说明
  10. cassandra java cql_Cassandra CQL v3.3中文文档(上)