java根据微信小程序传来的手机加密串解析获取手机号码

获取用户手机号码

  • 获取用户手机号码
  • 上面用到一个工具方法

获取用户手机号码

//小程序根据code获取用户openId
String result = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", 
"appid=" + FgStaticParam.AppId + //小程序APPID
"&secret="+ CloudSignHelper.wxspSecret + //小程序秘钥
"&js_code="+ registerReq.getCode() + //前端传来的code
"&grant_type=authorization_code");
JSONObject jsonObject = JSONObject.parseObject(result);

JSONObject userInfo = (JSONObject) getUserInfo(registerReq.getMobile(), //前端传来的手机加密串
jsonObject.get("session_key").toString(), //小程序根据code获取用户openId会返回一个session_key
registerReq.getIv());//前端传来的iv
String mobile = userInfo.getString("phoneNumber");//手机号码

上面用到一个工具方法

private Object getUserInfo(String encryptedData, String session_key, String iv) {
        // 被加密的数据
        byte[] dataByte = Base64.decode(encryptedData);
        // 加密秘钥
        byte[] keyByte = Base64.decode(session_key);
        // 偏移量
        byte[] ivByte = Base64.decode(iv);
        try {
            // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要
            int base = 16;
            if (keyByte.length % base != 0) {
                int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                keyByte = temp;
            }
            // 初始化
            Security.addProvider(new BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
            parameters.init(new IvParameterSpec(ivByte));
            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
            byte[] resultByte = cipher.doFinal(dataByte);
            if (null != resultByte && resultByte.length > 0) {
                String result = new String(resultByte, "UTF-8");
                return JSONObject.parseObject(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

你可能感兴趣的:(微信)