java – 使用填充密码解密时,输入长度必须是16的倍数
发布时间:2020-12-15 00:47:08 所属栏目:Java 来源:网络整理
导读:我有一个服务器和客户端套接字程序,服务器向客户端发送加密消息,即 服务器端代码: cipher2 = Cipher.getInstance("AES"); secretKeySpec = new SecretKeySpec(decryptedText,"AES");cipher2.init(Cipher.ENCRYPT_MODE,secretKeySpec);feedback = "Your answ
我有一个服务器和客户端套接字程序,服务器向客户端发送加密消息,即
服务器端代码: cipher2 = Cipher.getInstance("AES"); secretKeySpec = new SecretKeySpec(decryptedText,"AES"); cipher2.init(Cipher.ENCRYPT_MODE,secretKeySpec); feedback = "Your answer is wrong".getBytes(); cipher2.doFinal(feedback); dos.writeInt(feedback.length); dos.write(feedback); 客户端代码: int result_len = 0; result_len = din.readInt(); byte[] result_Bytes = new byte[result_len]; din.readFully(result_Bytes); cipher2 = Cipher.getInstance("AES"); cipher2.init(Cipher.DECRYPT_MODE,aesKey); byte[] encrypt = cipher2.doFinal(result_Bytes); 异常抛出byte [] encrypt = cipher2.doFinal(result_Bytes); javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:750) at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676) at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313) at javax.crypto.Cipher.doFinal(Cipher.java:2086) 问题是什么? 解决方法
有一个类似的问题.但重要的是要了解根本原因,并且可能因不同的用例而异.
情景1 byte[] encryptedBytes = Base64.decodeBase64(encryptedBase64String); 如果String由于某种原因配置错误或者编码不正确,您会看到错误“使用填充密码解密时输入长度必须是16的倍数” 场景2 场景3当与其中一个供应商集成时,我们发现我们必须使用URLEncoder对Base64进行加密,但我们不需要解码它,因为它是由供应商在内部完成的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |