Я пытаюсь реализовать базовый пример шифрования AES на двух устройствах в Java.Однако использование одного и того же пароля (128 бит) на обоих устройствах для генерации ключа AES приводит к разным ключам на обоих устройствах при каждом запуске приложения.Поэтому мы не можем расшифровать текст, который мы отправляем между устройствами.
Ниже приведены методы, которые я использую, они являются слегка измененными версиями кода, который я нашел в другом месте:
public String encryptMessage(String message, String password) throws Exception {
// Creating key and cipher
SecretKeySpec aesKey = new SecretKeySpec(password.getBytes("UTF-8"), "AES");
byte[] iv = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
IvParameterSpec ivspec = new IvParameterSpec(iv);
//AES cipher
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
// encrypt the text
cipher.init(Cipher.ENCRYPT_MODE, aesKey, ivspec);
byte[] encrypted;
encrypted = cipher.doFinal(message.getBytes());
return new String(encrypted, "UTF-8");
}
public String decryptMessage(String encryptedMessage, String password) throws Exception {
// Creating key and cipher
byte[] passwordBytes = password.getBytes("UTF-8");
SecretKeySpec aesKey = new SecretKeySpec(passwordBytes, "AES");
byte[] iv = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
IvParameterSpec ivspec = new IvParameterSpec(iv);
//AES cipher
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
// decrypting the text
cipher.init(Cipher.DECRYPT_MODE, aesKey, ivspec);
String decrypted = new String(cipher.doFinal(encryptedMessage.getBytes(Charset.forName("UTF-8"))));
//returning decrypted text
return decrypted;
}
Каждый раз, когда я запускаю этот код и распечатываю aesKey, он отличается.
Мое понимание AES и симметричного шифрования заключается в том, что при наличии одного и того же пароля он должен генерировать один и тот же ключ, иначе как он может расшифроватьартефакт?У меня неправильный конец клюшки по AES или кто-то может подсказать, что может происходить?