Java中解密微信加密数据工具类

网友投稿 253 2022-10-17


Java中解密微信加密数据工具类

1、引入依赖

org.projectlombok

lombok

true

com.alibaba

fastjson

<version>1.2.60

org.apache.commons

commons-lang3

3.8.1

org.bouncycastle

bcprov-jdk15on

1.55

2、解密工具类

import com.alibaba.fastjson.JSONObject;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

import lombok.extern.slf4j.Slf4j;

import org.apache.commons.lang3.StringUtils;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import java.security.AlgorithmParameters;

import java.security.Security;

import java.util.Arrays;

/**

* 解密微信加密数据工具类

*/

@Slf4j

public class WechatUtils {

/**

* 解密微信加密数据

*

* @param encryptedDathttp://a

* @param iv

* @param sessionkey

* @return

*/

public static JSONObject decryptWechatData(String encryptedData, String iv, String sessionkey) {

// 被加密的数据

byte[] dataByte = Base64.decode(encryptedData);

// 加密秘钥

byte[] keyByte = Base64.decode(sessionkey);

// 偏移量

byte[] ivByte = Base64.decode(iv);

try {

int base = 16;

if (keyByte.length % base != 0) {

int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);

byte[] temp = new byte[groups * base];

Arrays.fill(temp, (byte) 0);

System.arraycopy(keyByte, 0, temp, 0, keyByte.length);

keyByte = temp;

}

Security.addProvider(new BouncyCastleProvider());

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");

SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");

AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");

parameters.init(new IvParamethttp://erSpec(ivByte));

cipher.init(Cipher.DECRYPT_MODE, spec, parameters);

byte[] resultByte = cipher.doFinal(dataByte);

if (null != resultByte && resultByte.length > 0) {

String result = new String(resultByte, "UTF-8");

if (StringUtils.isNotBlank(result)) {

log.info("----------解密微信数据成功----------");

return JSONObject.parseObject(result);

}

}

} catch (Exception e) {

e.printStackTrace();

log.info("----------解密微信数据失败----------");

}

return null;

}

}

这样,我们将微信加密的数据,转化成了 JSON 对象,就得到了我们想要的数据了

以上就是Java中解密微信加密数据工具类的详细内容,更多关于Java加密解密工具类的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:实验案列:检索、备份及编辑文件
下一篇:如何在Microsoft Exchange 2013上安装https证书
相关文章

 发表评论

暂时没有评论,来抢沙发吧~