收藏
回答

小程序授权手机号的时候使用新手机会导致解密报错,是因为sessionId的问题吗?

如果直接使用默认手机号是没有问题的,使用新的手机号会报错。有知道的同学帮忙解答一下,万分感谢!

这是解密的代码

public static String decryptData(String encryptedData, String sessionKey, String iv) throws Exception {
    byte[] dataByte = Base64.getDecoder().decode(encryptedData);
    byte[] keyByte = Base64.getDecoder().decode(sessionKey);
    byte[] ivByte = Base64.getDecoder().decode(iv);

    // 确保密钥长度为 16 字节
    if (keyByte.length != 16) {
        throw new IllegalArgumentException("Invalid sessionKey length");
    }

    SecretKeySpec secretKey = new SecretKeySpec(keyByte, "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(ivByte));

    byte[] resultByte = cipher.doFinal(dataByte);
    if (resultByte != null && resultByte.length > 0) {
        return new String(resultByte, "UTF-8");
    }
    return null;
}


这是入参,encryptedData和iv是前端返回的

encryptedData的值是COe6bhZmHpMvLT3LfYHJn3HF0m3AxuW341xLwdYFGjN/U3lmoIxgyJ1fp3MgYY3ky3t8ky6dbsYu+rWvxU2Ne/9EU3o7/7/SpxBgBXDjcw6kMnPjtpaZIvO1nNxvN7cyjB6gqtvpkdtwNBJ4W0OUTm6+Y1Rj098Ybwboa5rdc4L2HA/0iO6L8kTZUiGmTAimkTRhDnh9Uc9hwV6eL+nsHg==

iv的值是E0lUdSvkw7BZDCAglmJxPg==

sessionKey的值是4ADH3gCjFVBxkrRXe3Zk7Q==


下面是报错

javax.crypto.BadPaddingException: Given final block not properly padded
        at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)
        at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
        at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
        at javax.crypto.Cipher.doFinal(Cipher.java:2165)
回答关注问题邀请回答
收藏

2 个回答

登录 后发表内容