1

所以基本上我已经使用 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);
4

0 回答 0