基本的に、UDP ソケットを使用して、サーバーとクライアントの間で簡単なチャット アプリケーションを作成しました。メッセージは、送信前に AES を使用して暗号化されます。ただし、送信されたメッセージを格納するために使用されるバイト配列のサイズに関して問題があります。今のところ、バイト配列のサイズは 16 です。
byte[] buffer = new byte[16];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
しかし今、私はこのバイトサイズにこだわっています。16 バイトを超えるメッセージを送信しようとすると、BadPaddingException: 与えられた最終ブロックが適切に埋め込まれていないため、その後、送信する任意のサイズのメッセージで同じエラーが発生します。
バイト配列のサイズを増やそうとすると、送信するすべてのメッセージですぐに BadPaddingException: Given final ブロックが適切に埋め込まれていません。
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);