java解码小程序的获取的电话号码--绝对满足你

本最近在尝试小程序相关的功能,比如用微信信息登陆小程序,小程序支付(这个尝试不了要有营业执照)等,当本人人尝试获取用户手机号作为用户相关信息时,发现官网压根就没有例子。。。。但如php,python,甚至是go都有。。哈哈哈,网上很多例子但是大部分都有问题,他们的问题出在哪。

  1. 第一个依赖包,依赖包的选择很重要,本人尝试很多base64包。 本人用的java自身的工具包就是java.until.base64,很多人都认为这个包都用不了。当然如org.apache.tomcat.util.codec.binary.Base64也可以,
  2. 第二个 问题是在这个包,本人根据网上的例子结合官方文档api以及自己差不多十几次的尝试,找问题,终于发现原因,就是他们方法用错了应该用的是Base64.getEncoder().encode(),解出来字节数组长度为32,这个很多老铁郁闷吧,其实微信官方文档是有相关提示的如下,用的方法应该是Base64.getDecoder().decode(xxxx)
    在这里插入图片描述
  3. 第三个 就是关于空格问题,session_key, encryptedData, iv,有存在空格的问题,要把空格变成+
  4. 第四个 还是长度问题---- byte[] keyByte=Base64.getDecoder().decode(session_key1),这里的keyByte长度必须补到16,不足的补0
    例子如下
public Object getPhoneNumber(String session_key, String encryptedData, String iv) {
    
    
        String session_key1=session_key.replace(" ","+");
        String encryptedData1=encryptedData.replace(" ","+");
        String iv1=iv.replace(" ","+");
        byte[] encrypData =Base64.getDecoder().decode(encryptedData1);

        byte[] ivData =Base64.getDecoder().decode(iv1);

        byte[] keyByte=Base64.getDecoder().decode(session_key1);

        AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivData);
        String resultString = null;
        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;
            }
            System.out.println(keyByte.length);
            Security.addProvider(new BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");

            // 设置为解密模式
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            resultString = new String(cipher.doFinal(encrypData), "UTF-8");
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        JSONObject object = JSONObject.parseObject(resultString);
        return object.getString("purePhoneNumber");
    }


猜你喜欢

转载自blog.csdn.net/weixin_43591127/article/details/117559872