• 微信小程序用户数据解密算法-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?
    需要小程序管理员将小程序绑在微信开放平台

  • 相关阅读:
    MySql开启GTID和多线程复制功能
    MySQL自增锁等待问题解决
    MySQL超大表如何提高count速度
    MySQL如何计算重要的指标,来确定配置是否正确
    MySQL传输表空间使用方法
    用MySQL的optimizer_trace进行sql调优
    MySQL主从复制读写分离如何提高从库性能-实战
    Mongo创建文档
    Mongo索引
    Mongo开启查询日志
  • 原文地址:https://www.cnblogs.com/rogersma/p/13664374.html
Copyright © 2020-2023  润新知