php退款req_info乱码,退款结果通知解密req_info失败,麻烦看看代码有错误吗?

/**

* 对微信的返回数据进行解密 做AES-256-ECB解密(PKCS7Padding)

* @param encrypted 目标密文

* @param aesKey 解密密钥

* @param

* @throws Exception

*/

public static String decryptWXReturn(String encrypted, String aesKey){

try {

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC"); //这里是不是这样写?

//对秘钥进行MD5编码

//这里生成key的方法是错的

Key key = initKeyForAES(MD5Util.encode(aesKey).toLowerCase().toString());

//这才是生成key的正确方法

SecretKeySpec key = new SecretKeySpec(MD5Utils.MD5Encode(aesKey,"UTF-8").toLowerCase().toLowerCase().getBytes(), "AES");

//对秘钥进行MD5加密的时候必须指定UTF-8编码,这样写也是不行的

SecretKeySpec key = new SecretKeySpec(MD5Util.encode(aesKey).toLowerCase().toLowerCase().getBytes(), "AES"); //这样也会报错

cipher.init(Cipher.DECRYPT_MODE, key);

byte[] encryptedBase64 = new BASE64Decoder().decodeBuffer(encrypted);

byte[] decbbdt = cipher.doFinal(encryptedBase64); //到这一步就开始报错pad block corrupted

return new String(decbbdt,"UTF-8");

} catch (Exception e) {

logger.error(e);

}

return null;

}

public static Key initKeyForAES(String key) throws NoSuchAlgorithmException {

if (null == key || key.length() == 0) {

throw new NullPointerException("key not is null");

}

SecretKeySpec key2 = null;

SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

random.setSeed(key.getBytes());

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(256, random); //这里到底是128还是256??但是两种试了还是报错pad block corrupted

//kgen.init(128, random);

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

key2 = new SecretKeySpec(enCodeFormat, "AES");

} catch (NoSuchAlgorithmException ex) {

throw new NoSuchAlgorithmException();

}

return key2;

}

秘钥是一致的,这个AES-256-ECB解密(PKCS7Padding)到底怎么解啊,请问代码有问题吗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值