微信退款通知解密错误pad block corrupted 或者pad block corrupted

有些朋友可能遇到了下面的错误:
pad block corrupted
或者
last block incomplete in decryption
这很有可能是编码错误导致的
微信支付将req_info进行base64编码时,用的字符集不是UTF-8, 而是ISO-8859-1
如果你用UTF-8进行解码, 就一定会报错.

原因是:
将一个byte[]转换成String, 然后再从String转换为byte[]时,
第一个byte[]的值和第二个byte[]的值是不同的,
除非你指定字符集为ISO-8859-1, 或者默认字符集为ISO-8859-1.

由于UTF-8是多字节编码,需要用多个字节来表示一个字符的编码,所以也就出现了在转换之后byte[]数组长度、内容不一致的情况。
而ISO-8859-1编码是单字节编码,所以使用该编码就不会出现上面的问题

详情见下贴:
https://blog.youkuaiyun.com/qq_27760433/article/details/78327328

怎样解决这个问题呢?
方法有两种:
(1),
如果你使用java 8 自带的java.util.Base64类,
例如:
Base64.Decoder decoder = Base64.getDecoder();

那么解密方法这么写:

public static String decryptData(final String base64Data) throws Exception
{
	final Cipher cipher
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值