zoukankan      html  css  js  c++  java
  • 微信小程序用户数据解密算法-Java版

    public class AnthCodeVerify {
        private final static String cipherString = "AES/CBC/PKCS5Padding";
    
        public static JSONObject decrypt(String encryptedData, String iv, String sessionKey) throws Exception {
            String jsonStr;
            try {
                BASE64Decoder base64Decoder = new BASE64Decoder();
                /**
                 * 小程序加密数据解密算法
                 * https://developers.weixin.qq.com/miniprogram/dev/api/signature.html#wxchecksessionobject
                 * 1.对称解密的目标密文为 Base64_Decode(encryptedData)。
                 * 2.对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节。
                 * 3.对称解密算法初始向量 为Base64_Decode(iv),其中iv由数据接口返回。
                 */
                byte[] encryptedByte = base64Decoder.decodeBuffer(encryptedData);
                byte[] sessionKeyByte = base64Decoder.decodeBuffer(sessionKey);
                byte[] ivByte = base64Decoder.decodeBuffer(iv);
                /**
                 * 以下为AES-128-CBC解密算法
                 */
                SecretKeySpec skeySpec = new SecretKeySpec(sessionKeyByte, "AES");
                Cipher cipher = Cipher.getInstance(cipherString);
                IvParameterSpec ivParameterSpec = new IvParameterSpec(ivByte);
                cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivParameterSpec);
                byte[] original = cipher.doFinal(encryptedByte);
                jsonStr = new String(original);
            } catch (Exception ex) {
                throw new Exception("Illegal Buffer");
            }
            JSONObject jsonObject = new JSONObject(jsonStr);
            return jsonObject;
        }
    }
    

    解密后的数据格式如下:

    {
      "openId": "OPENID",
      "nickName": "NICKNAME",
      "gender": GENDER,
      "city": "CITY",
      "province": "PROVINCE",
      "country": "COUNTRY",
      "avatarUrl": "AVATARURL",
      "unionId": "UNIONID",
      "watermark": {
        "appid":"APPID",
        "timestamp":TIMESTAMP
      }
    }
    

    Q1: 为什么解密后的数据中没哟unionId?
    需要小程序管理员将小程序绑在微信开放平台

  • 相关阅读:
    编译debian内核
    mini2440 最小根文件系统制作和nfs启动
    mini2440 uboot烧写uImage
    51单片机串口烧写故障
    uboot 2013.01 代码简析(3)第二阶段初始化
    uboot 2013.01 代码简析(2)第一阶段初始化
    uboot 2013.01 代码简析(1)开发板配置
    uboot 2013.01 s3c6400编译失败
    Shiro
    Shiro
  • 原文地址:https://www.cnblogs.com/rogersma/p/13664374.html
Copyright © 2011-2022 走看看