我来告诉大家这个问题的根本原因是什么,前端传给你的参数有三个一个code 一个iv 一个加密的字符串,用code换取sessionkey再解密加密数据,解密失败的时候,你不妨拿你上一次的sessionkey来解密试试 你会发现 竟然解密成功。其实就是前端在上一个code还没过期的情况下获取的手机号加密数据,然后发给你的时候又重新获取了一个code跟加密数据一起传给你。
小程序手机号解密 偶发性解密异常?javax.crypto.BadPaddingException: Given final block not properly padded 后台解密 偶尔解密失败 重新调用都是成功的 byte[] encData = Base64.decodeBase64(encryptedData); byte[] ivStr = Base64.decodeBase64(iv); byte[] key = Base64.decodeBase64(sessionKey); AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivStr); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(key, "AES"); cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); String dataResult = new String(cipher.doFinal(encData),"UTF-8");
2019-12-13