有些朋友可能遇到了下面的错误:
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();
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