所以基本上我已经使用 UDP 套接字在服务器和客户端之间创建了一个简单的聊天应用程序。消息在发送之前使用 AES 加密。但是,现在我对用于包含已发送消息的字节数组的大小有疑问。现在我的字节数组的大小为 16。
byte[] buffer = new byte[16];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
但现在我被这个字节大小困住了。如果我尝试发送超过 16 个字节的消息,它会给我一个 BadPaddingException: Given final block not proper padding,之后我发送的任何大小的消息都会给我同样的错误。
如果我尝试增加字节数组的大小,我发送的任何消息都会立即给我一个 BadPaddingException: Given final block not proper padding。
有人对如何发送和接收大于 16 字节的消息有任何想法吗?
这是我的加密代码:
Cipher encryptor = Cipher.getInstance("AES/CBC/PKCS5Padding");
Cipher decryptor = Cipher.getInstance("AES/CBC/PKCS5Padding");
encryptor.init(Cipher.ENCRYPT_MODE, secret);
byte[] IV = encryptor.getIV();
packet.setData(IV);
socket.send(packet);
IvParameterSpec ips = new IvParameterSpec(IV);
decryptor.init(Cipher.DECRYPT_MODE, secret, ips);
我发送数据包的代码:
String message = input.next();
buffer = encryptor.doFinal(message.getBytes());
packet = new DatagramPacket(buffer, buffer.length, clientIP, port);
System.out.println("Sent: " + message);
socket.send(packet);
我接收数据包的代码:
buffer = new byte[16];
packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
buffer = decryptor.doFinal(buffer);
String reply = new String(buffer);
System.out.println("Received: "+ reply);