Я должен сгенерировать ключ AES и у меня есть пара ключей RSA для приложения чата. Я должен зашифровать сообщение ключом AES, после чего зашифровать ключ AES ключом publi c RSA. После этого пользователь расшифровывает ключ AES с помощью закрытого ключа RSA и дешифрует сообщение с заданным ключом AES. Я проверил свой код, но после шифрования и дешифрования я получаю другой ключ AES с помощью publi c и закрытого ключа.
Я думаю, что у меня проблема с кодировкой / декодированием Base64 или использованием какой-либо ключевой функции, такой как key.getEncode c или key.toString.
Это мой код
public void sendMessage(User receiver, String message) throws Exception {
//Generate AES key for encrypt message
KeyGenerator keyGenerator=KeyGenerator.getInstance("AES");
Integer keyBitSize=256;
keyGenerator.init(keyBitSize);
SecretKey simKey=keyGenerator.generateKey();
System.out.println("AES KEY: "+simKey.getEncoded()+"\n");
//Encrypt message
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, simKey);
byte[] encMess1=cipher.doFinal(message.getBytes("UTF-8"));
String messToWrite=Base64.getEncoder().encodeToString(encMess1);
//Encrypt AES key
byte[] KeyToEnc=simKey.getEncoded();
cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, receiver.getPub());
cipher.update(KeyToEnc);
byte[] AESEncWrt=cipher.doFinal();
String aeskeyString=new String(Base64.getEncoder().encodeToString(AESEncWrt));
System.out.println("AES ENC:"+aeskeyString+"\n");
//Decrypt AES key
byte[] KeyToDec=Base64.getDecoder().decode(aeskeyString.getBytes());
cipher.init(Cipher.DECRYPT_MODE, receiver.getPriv());
cipher.update(KeyToDec);
byte[] decAesKey=cipher.doFinal();
System.out.println("AES DEC: "+decAesKey+"\n");
//Write message and AES key in file
BufferedWriter messFile=new BufferedWriter(new FileWriter(receiver.getInbox()+"/"+getUsername()+".txt"));
System.out.println("WRITING TO FILE:"+messToWrite+"\n");
messFile.write(messToWrite);
messFile.close();
BufferedWriter aeswrite=new BufferedWriter(new FileWriter(receiver.getInbox()+"/"+getUsername()+"key.txt"));
System.out.println("WRT KEY:"+aeskeyString+"\n");
aeswrite.write(aeskeyString);
aeswrite.close();
System.out.println("-------------------------------");
}
Извините, если мой код беспорядок.