java 微信工具类解密微信回调使用

简介: java 微信工具类解密微信回调使用

public class WechatDecryptDataUtil {

public static String decryptData(String encryptDataB64, String sessionKeyB64, String ivB64) {
    return new String(
            decryptOfDiyIV(
                    Base64.decode(encryptDataB64),
                    Base64.decode(sessionKeyB64),
                    Base64.decode(ivB64)
            )
    );
}

private static final String KEY_ALGORITHM = "AES";
private static final String ALGORITHM_STR = "AES/CBC/PKCS7Padding";
private static Key key;
private static Cipher cipher;

private static void init(byte[] keyBytes) {
    // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要
    int base = 16;
    if (keyBytes.length % base != 0) {
        int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);
        byte[] temp = new byte[groups * base];
        Arrays.fill(temp, (byte) 0);
        System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);
        keyBytes = temp;
    }
    // 初始化
    Security.addProvider(new BouncyCastleProvider());
    // 转化成JAVA的密钥格式
    key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
    try {
        // 初始化cipher
        cipher = Cipher.getInstance(ALGORITHM_STR, "BC");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 解密方法
 *
 * @param encryptedData 要解密的字符串
 * @param keyBytes      解密密钥
 * @param ivs           自定义对称解密算法初始向量 iv
 * @return 解密后的字节数组
 */
private static byte[] decryptOfDiyIV(byte[] encryptedData, byte[] keyBytes, byte[] ivs) {
    byte[] encryptedText = null;
    init(keyBytes);
    try {
        cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivs));
        encryptedText = cipher.doFinal(encryptedData);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return encryptedText;
}

}

相关文章
|
10天前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
30 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
15天前
|
Java
Java 些许公共工具类
Java 些许公共工具类
12 1
|
10天前
|
算法 小程序 Java
java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上
这篇文章介绍了如何使用Java获取微信小程序的二维码,并将其调整大小后合成到海报(另一张图片)上。
23 0
|
15天前
|
小程序
java--微信小程序发送模板消息
java--微信小程序发送模板消息
62 0
|
2月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
24 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
2月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
2月前
|
前端开发 JavaScript Java
java实现异步回调返回给前端
综上,Java中实现异步回调并将结果返回给前端是一项涉及后端异步处理和前端交互的综合任务。在实际项目中,开发人员需要根据应用需求和性能预期选择合适的异步模型与工具,并进行适当的配置和优化。
147 3
|
2月前
|
前端开发 Java UED
java实现异步回调返回给前端
通过以上的方式,可以优雅地在Java中实现异步回调并将结果返回给前端,大大提升了应用程序的响应能力和用户体验。
164 1
|
2月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
38 0