微信小程序数据解密

    public static String decrypt(String encryptedData, String ivData, String code) {
        try {
            //微信的接口,通过code获取sessionKey
            String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + WeChatConstant.APPID_SMALL_ROUTINE +
                    "&secret=" + WeChatConstant.SECRET_SMALL_ROUTINE + "&js_code=" + code + "&grant_type=authorization_code";
            RestTemplate restTemplate = new RestTemplate();
            //进行网络请求,访问url接口
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
//            根据返回值进行后续操作
            String sessionKey = "";
            if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) {
                String sessionData = responseEntity.getBody();
                //解析从微信服务器获得的openid和session_key;
                JSONObject object = JSONObject.parseObject(sessionData.trim());
                //获取用户的唯一标识  Openid
                sessionKey = object.getString("session_key");
                System.out.println(sessionKey);
            }
            byte[] encrypData1 = Base64.decodeBase64(encryptedData);
            byte[] ivData1 = Base64.decodeBase64(ivData);
            byte[] sessionKey1 = Base64.decodeBase64(sessionKey);
            int base = 16;
            if (sessionKey1.length % base != 0) {
                int groups = sessionKey1.length / base + (sessionKey1.length % base != 0 ? 1 : 0);
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(sessionKey1, 0, temp, 0, sessionKey1.length);
                sessionKey1 = temp;
            }
            // 初始化
            Security.addProvider(new BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec spec = new SecretKeySpec(sessionKey1, "AES");
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
            parameters.init(new IvParameterSpec(ivData1));
            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
            // 初始化
            byte[] resultByte = cipher.doFinal(encrypData1);
            if (null != resultByte && resultByte.length > 0) {
                String result = new String(resultByte, "UTF-8");
                System.out.println("*************************\n" + result);
                return result;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值