java – 使用填充密码解密时,输入长度必须是16的倍数
发布时间:2020-05-25 13:22:16 所属栏目:Java 来源:互联网
导读:我有一个服务器和客户端套接字程序,服务器向客户端发送加密消息,即 服务器端代码: cipher2 = Cipher.getInstance(AES); secretKeySpec = new SecretKeySpec(decryptedText, AES);cipher2.init(Cipher.ENCRYPT_MODE, secretKeySpec);feedback = Yo
|
我有一个服务器和客户端套接字程序,服务器向客户端发送加密消息,即
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进行加密,但我们不需要解码它,因为它是由供应商在内部完成的 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
