При кодировании алгоритма AES-192 в java между сокетами я получаю это исключение и не вижу, как его исправить. Я думаю, что это должно быть что-то с тем, как он декодирует сервер, как я читал в другом посте, но я не могу понять это правильно. Моя java версия 13 в случае необходимости. Спасибо за помощь 1008 *
КОД КЛИЕНТА
import java.net.*;
import java.io.*;
import javax.crypto.*;
import java.security.*;
import java.util.*;
import javax.crypto.Cipher;
import javax.crypto.Mac;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.Base64;
public class Alice {
private Socket socket = null;
private DataOutputStream out = null;
private BufferedReader in = null;
public Alice(String address, int port) {
try {
socket = new Socket(address, port);
in = new BufferedReader(new InputStreamReader(System.in));
out = new DataOutputStream(socket.getOutputStream());
} catch(UnknownHostException u) {
System.out.println(u);
} catch(IOException i) {
System.out.println(i);
}
String plaintext = "";
while(!plaintext.equals("Stop")){
try {
System.out.println("Introduce plaintext:");
plaintext = in.readLine();
String ciphertext = encrypt(plaintext);
System.out.println("Encrypted: " + ciphertext + "\n");
out.writeUTF(ciphertext);
} catch(IOException i) {
System.out.println(i);
}
}
try {
socket.close();
in.close();
out.close();
} catch(IOException i) {
System.out.println(i);
}
}
public static String encrypt(String value) {
try {
String key = "i5q5jZFd73kuK3wG2jTCvtWp";
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
int ivSize = 16;
byte[] iv = new byte[ivSize];
SecureRandom random = new SecureRandom();
random.nextBytes(iv);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivParameterSpec);
byte[] encrypted = cipher.doFinal(value.getBytes());
byte[] encryptedAndIV = new byte[ivSize + encrypted.length];
System.arraycopy(iv, 0, encryptedAndIV, 0, ivSize);
System.arraycopy(encrypted, 0, encryptedAndIV, ivSize, encrypted.length);
return new String(Base64.getEncoder().encode(encryptedAndIV));
} catch (Exception e) {
throw new RuntimeException("Error occured while encrypting data", e);
}
}
public static void main(String args[]) {
Alice alice = new Alice("localhost", 3125);
}
}