收藏
回答

小程序登录,每个用户第一次登录的时候,解密失败?


https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
通过这个接口获取的sessionKey 

encryptedData  和js_code  以及Iv  都是前段通过组件调用生成的

我需要通过这个接口获取对数据解密获取用户的手机号,但是每个用户,每天第一次的时候都会解密失败
 

public class Main {
    public static void main(String[] args) {

        String  encryptedData = "M0wBgDdvZchU76gg1IhUyFCz0hwvjC9D09W8HVOIfC83w7tDYy/1QU0UooLapUWQvzPa1FQijVs8J5ONyXdZsfwrz4RqbqyGdJ/CjATKaUXnGZIgG9zN7Ya46mMuSrMwLN0PH1hpGHf3yk9Y245ToT1hwBc4qzh1GsbKgrw6xO2IG76OAj+fcrKDKsmqNys3TzNxnZCYj4BsJlMbBse4DQ==";
        String  sessionKey = "wk63HbifGK/eKj+5anldVg==";
        String  iv = "gwcnT9jIsmH6iAeoyp9wlg==";
        String s = Main.decryptPhoneNumber(encryptedData, sessionKey, iv);

    }
    public static String decryptPhoneNumber(String encryptedData, String sessionKey, String iv) {
        try {
            byte[] dataByte = Base64.decode(encryptedData);
            byte[] keyByte = Base64.decode(sessionKey);
            byte[] ivByte = Base64.decode(iv);
            SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(ivByte));
            byte[] resultByte = cipher.doFinal(dataByte);
            return new String(resultByte);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
回答关注问题邀请回答
收藏

1 个回答

  • 一笑皆春
    一笑皆春
    2025-04-17

    检查下js_code前端获取的是否正确,获取手机号需要用button返回的code.

    再检查下后端APPID等信息是否是当前小程序的

    2025-04-17
    有用
    回复 3
登录 后发表内容