微信支付AES加解密算法
AES256/ECB/PKCS7Padding一、AES
高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法
二、实现
package com.wx;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
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";
private static final String APIKEY = "你的 api key";
/**
* AES解密
*
* @param base64Data base64
* @return string
*/
public static String decryptData(String base64Data, String lowMad5Key) throws Exception {
SecretKeySpec key = new SecretKeySpec(lowMad5Key.getBytes(), ALGORITHM);
Security.addProvider(new 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), StandardCharsets.ISO_8859_1);
return new String(cipher.doFinal(newData.getBytes(StandardCharsets.ISO_8859_1)), StandardCharsets.UTF_8);
}
public static String MD5(String data) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(data.getBytes(StandardCharsets.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 String mapResult(String info) throws Exception{
return decryptData(info, AESUtil.MD5(APIKEY).toLowerCase());
}
}
简单易读,通俗易懂。。。好用