微信退款回调AES算法(AES-256-ECB)

解密步骤如下:

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值