Я использую следующую команду unix для создания 128-битного секретного ключа для AES и записи его в файл.
dd if=/dev/urandom of=/data/key.txt bs=16 count=1
Я читаю ключ из файла в классе Java и использую его для шифрования/дешифрования.
BufferedReader reader = new BufferedReader(new FileReader(keylocation.getFile()));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String secretKey = stringBuilder.toString();
SecretKeySpec key = new SecretKeySpec(secretKey.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
encryptedString = (Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))));
Но я получаю следующее исключение
java.security.InvalidKeyException: Invalid AES key length: 28 bytes
Поскольку я генерирую 128-битный (16 байт) ключ в файле, как его изменить на 28 байт?