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?
    需要小程序管理员将小程序绑在微信开放平台

  • 相关阅读:
    JS的Document属性和方法小结
    机器学习笔记——最小二乘法
    c语言中printf()函数中的参数计算顺序
    机器学习笔记——拉格朗日乘子法和KKT条件
    Linux bash笔记
    java.util.ConcurrentModificationException的解决办法
    浅谈对java中传参问题的理解
    机器学习笔记——t分布知识点总结
    机器学习笔记——测试集和验证集的区别
    java中对HashMap遍历的方式
  • 原文地址:https://www.cnblogs.com/rogersma/p/13664374.html
Copyright © 2011-2022 走看看