微信小程序用戶數據解密算法-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?
需要小程序管理員將小程序綁在微信開放平台


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM