打开官方文档,开心~ 腾讯爸爸竟然给提供了解密算法
然而我下载解压后人傻了
可能鹅厂没养Java程序猿吧
那就看这C++改造吧
publicclassAnthCodeVerify{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();byte[]encryptedByte=base64Decoder.decodeBuffer(encryptedData); byte[] sessionKeyByte = base64Decoder.decodeBuffer(sessionKey); byte[] ivByte = base64Decoder.decodeBuffer(iv); 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?需要小程序管理员将小程序绑在微信开放平台