【发布时间】:2012-05-16 17:01:44
【问题描述】:
我有一个服务器和客户端套接字程序,服务器向客户端发送加密消息,即 服务器端代码:
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)
有什么问题?
【问题讨论】:
-
result_len 是 16 的倍数吗?如果不是,请确保它是,然后 result_Bytes 应该是正确的长度。
标签: java