微信小程序后台 iv encryptedData  解密准备工作

首先

第一步配置 pom

<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk16</artifactId><version>1.46</version>
</dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.4</version>
</dependency><dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.3</version> <classifier>jdk15</classifier>
</dependency>

第二步 准备AESUtils 工具类 代码如下


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.spec.InvalidParameterSpecException;
import java.util.Arrays;/*** @ClassName AESUtils* @Description TODO* @Author 独狼Kiss* @Date 2021/9/14 13:46* @Version 1.0**/@Slf4j
public class AESUtils {// 加密模式private static final String ALGORITHM = "AES/CBC/PKCS7Padding";private static final String CHARSET_NAME = "UTF-8";private static final String AES_NAME = "AES";//解决java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Paddingstatic {Security.addProvider(new BouncyCastleProvider());}/*** 解密** @param content 目标密文* @param key     秘钥* @param iv      偏移量* @return*/public static String decrypt(@NotNull String content, @NotNull String key, @NotNull String iv) {String result = "";// 被加密的数据byte[] dataByte = Base64.decodeBase64(content);// 加密秘钥byte[] keyByte = Base64.decodeBase64(key);// 偏移量byte[] ivByte = Base64.decodeBase64(iv);try {// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要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;}if (ivByte.length % base != 0) {int groups = ivByte.length / base+ (ivByte.length % base != 0 ? 1 : 0);byte[] temp = new byte[groups * base];Arrays.fill(temp, (byte) 0);System.arraycopy(ivByte, 0, temp, 0, ivByte.length);ivByte = 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 IvParameterSpec(ivByte));cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化byte[] resultByte = cipher.doFinal(dataByte);if (null != resultByte && resultByte.length > 0) {result = new String(resultByte, "UTF-8");}} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidParameterSpecException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (InvalidAlgorithmParameterException e) {e.printStackTrace();} catch (NoSuchProviderException e) {e.printStackTrace();}return result;}}

第三步 调用方法测试(本人为展示而写的 变量参数请自行更换)

public static void main(String[] args) throws Exception{String encryptedData = "";// 注意encryptedData 需要替换空格为“ + ”String sessionKey = "tiihtNczf5v6AKRyjwEUhQ==";String iv = "r7BXXKkLb8qrSNn05n0qiA==";System.out.println(AESUtils.decrypt( encryptedData, sessionKey, iv));}

注意事项:

  • encryptedData: 前端所带来的encryptedData需要将字符串里的空格替换为“+”

    String encryptedData = encryptedData.replace(" ", "+")
  • AESUtils.decrypt 方法返回的用户数据为JSON格式
    {"openId":"o1OPm5644NeGMltCwX_DyxwOLH9E","nickName":"微信用户","gender":0,"language":"","city":"","province":"","country":"","avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132","watermark":{"timestamp":1631606001,"appid":"wxa00038c72b93c223"}}
    

微信小程序后台 iv encryptedData 解密相关推荐

  1. java写微信小程序答辩问题_java微信小程序开发中加密解密算法总结

    详解java微信小程序开发中加密解密算法 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H5.还接入了小程序开发.但是,小程序中竟然没有提供Java版本的加密数据解密算法.这着实让 ...

  2. PHP微信小程序之获取并解密用户数据获取openId和unionId

    前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 在实际的小程序开发中,往往需要用户授权登陆并获取用 ...

  3. 微信小程序获取手机号并解密详解

    微信小程序获取手机号并解密 1 获取手机号 2 解密 2.1 获取所需数据 2.2 解密返回数据 1 获取手机号 获取手机号的过程官方文档有详细的介绍.参考官方链接 要注意的是,此功能只对非个人且完成 ...

  4. python开发微信小程序-Django微信小程序后台开发教程的实现

    1 申请小程序,创建hello world小程序 2 添加交互框和按钮 index. wxml cal {{ result }} index.wxss /**index.wxss**/ .input ...

  5. 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近Native App性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服 ...

  6. 微信小程序——微信小程序后台自定义分析,数据准确性分析

    序 由于公司小程序产品大多为信息流产品,所以对小程序图文的数据准确性,精细度有较高的需求,以便编辑人员通过对数据的分析,可以针对性的编写图文,提高爆文数量. 问题描述 公司自己是有一个统计平台,对小程 ...

  7. 【delphi】开发微信小程序后台控件(一)(含源代码、演示程序、控件使用帮助)

    1. 前言 微信小程序已经非常普及,但是遗憾的是官方提供的 SDK 等没有Delphi语言的,这样使用Delphi语言开发微信小程序后台就相对比较困难,需要研究平台API,费时费力,特别是调试API很 ...

  8. 微信小程序后台获取签名,裁剪并上传图片至阿里云oss

    微信小程序后台获取签名,裁剪并上传图片至阿里云oss 首先,设置微信开发者工具,选择校验合法域名,防止本地可应使用,线上报错问题: 其次,在微信公众平台–小程序开发,设置合法域名 Oss设置–> ...

  9. 微信小程序 页面传值文本解密问题

    微信小程序 页面传值文本解密问题 遇到问题 最近在做小程序,遇到这样一个需求: 将百度的Ueditor编辑器存入的文本数据显示在小程序中,需要保留之前的样式,这就用到了 WxParse插件,它能够用解 ...

最新文章

  1. 邬贺铨:工业物联网的技术与前景
  2. 用cookie实现localstorage功能
  3. Vue + webpack 项目实践
  4. 使用脚本安装elasticsearch7.3的记录
  5. Vue基础学习(一)------内部指令
  6. poj3981 字符串替换-字符串的基本操作
  7. 没有bug队——加贝——Python 练习实例 5,6
  8. SpringMVC 入门示例讲解
  9. JVM内存分配与垃圾回收
  10. php跨进程内存共享,进程管理与内存共享
  11. 微信小程序编辑与显示列表信息
  12. 软件库App源码+后端源码
  13. day2 craps赌博游戏
  14. 设置路由器当作交换机使用
  15. Minesweeper 蓝桥杯 扫雷游戏(化繁为简)(摒弃多层循环)
  16. 解决使用shutil.rmtree无法删除文件夹的方案
  17. 报错 proxyconnect tcp: tls: first record does not look like a TLS handshake
  18. 论文解读:《功能基因组学transformer模型的可解释性》
  19. 可转债第一课:神奇的可转债
  20. Y2K Accounting Bug poj-2586

热门文章

  1. minedata二维地图常用功能开发
  2. c语言 实现三子棋(电脑是随机下棋子的)
  3. apache的AllowOverride以及Options使用详解
  4. HIT CSAPP LAB4
  5. 什么是服务器版操作系统,什么是服务器版操作系统
  6. Alice和Bob的故事
  7. python外星人入侵代码提示has no attri_Python外星人入侵完整代码和注释(四)
  8. 《CSS Secrets》读书笔记(3)
  9. 绝地求生优化服务器什么意思,《绝地求生》百日行动:优化服务器,封禁200万个账号...
  10. 已知A,B点,和C点,让C点在AB线段上移动