收藏
回答

微信小程序授权解密手机号

一直报错javax.crypto.IllegalBlockSizeException: last block incomplete in decryption

回答关注问题邀请回答
收藏

2 个回答

  • Blue sky
    Blue sky
    2022-05-13

    兄弟 ,我也遇到同样问题,你解决了吗?

    2022-05-13
    有用
    回复
  • 飞腾
    飞腾
    2020-05-20

        @RequestMapping("/binding/mobilePhone")

        @ResponseBody

        public Object mobilePhone(HttpServletRequest request, String encryptedData,  String iv,  String session_key, String openid) {

    //        System.out.println("encryptedData:"+encryptedData+"  iv:"+iv+"  session_key:"+session_key+"   openid:"+openid);


            JSONObject obj = this.weChatService.getPhoneNumber(session_key, encryptedData, iv);

            String phone = obj.get("phoneNumber").toString();

            User user = this.uuserService.getUser(openid);

            if (ToolUtil.isNotEmpty(user)) {

                user.setPhone(phone);

                return this.uuserService.update(user);

            }

            return null;

        }


    public JSONObject getPhoneNumber(String session_key, String encryptedData, String iv) {
        byte[] dataByte = Base64.decode(encryptedData);
        byte[] keyByte = Base64.decode(session_key);
        byte[] ivByte = Base64.decode(iv);
    
        try {
            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");
            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;
    }
    


    2020-05-20
    有用
    回复
登录 后发表内容
问题标签