美文网首页
微信加密数据解密算法 Java 版

微信加密数据解密算法 Java 版

作者: 秋雁上海 | 来源:发表于2020-08-11 22:33 被阅读0次

一。 Maven 配置

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.65</version>
</dependency>

二。解密后的数据

{
    "openId": "",
    "nickName": "",
    "gender": 1,
    "language": "",
    "city": "",
    "province": "",
    "country": "",
    "avatarUrl": "",
    "unionId": "",
    "watermark": {
        "timestamp": 1588254098,
        "appid": ""
    }
}

三。相关代码

package com.x5.library.common;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.spec.InvalidParameterSpecException;
import java.util.Base64;

public class WechatUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(WechatUtil.class);

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    private static final String KEY_ALGORITHM = "AES";
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";

    private static AlgorithmParameters generateIV(byte[] iv) throws NoSuchAlgorithmException, InvalidParameterSpecException {
        AlgorithmParameters parameters = AlgorithmParameters.getInstance(KEY_ALGORITHM);
        parameters.init(new IvParameterSpec(iv));
        return parameters;
    }

    private static byte[] decrypt(byte[] content, byte[] key, byte[] iv) throws Exception {
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
        Key keySpec = new SecretKeySpec(key, KEY_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, keySpec, generateIV(iv));

        byte[] result = cipher.doFinal(content);
        return result;

    }

    public static String decryptData(String encryptedData, String session_key, String ivStr) throws Exception {
        Base64.Decoder decoder = Base64.getDecoder();

        byte[] content = decoder.decode(encryptedData);
        byte[] key = decoder.decode(session_key);
        byte[] iv = decoder.decode(ivStr);

        byte[] plain = decrypt(content, key, iv);
        String plainStr = new String(plain, StandardCharsets.UTF_8);

        LOGGER.debug("@@@@@@ plainStr {}", plainStr);

        return plainStr;
    }
}

相关文章

网友评论

      本文标题:微信加密数据解密算法 Java 版

      本文链接:https://www.haomeiwen.com/subject/gnjudktx.html