1
Я пытаюсь добавить 16-байтовое безопасно сгенерированное IV в каждый файл после его зашифрования, но до его написания. Это значит, что я могу расшифровать его позже, вытащив IV из файла. Это мой код:Добавление IV в зашифрованный файл для последующего дешифрования
public static void encrypt(byte[] file, String password, String fileName, String dir)
throws Exception {
SecureRandom r = new SecureRandom();
//128 bit IV generated for each file
byte[] iv = new byte[IV_LENGTH];
r.nextBytes(iv);
SecretKeySpec keySpec = new SecretKeySpec(password.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivspec);
FileOutputStream fos = new FileOutputStream(dir + fileName);
CipherOutputStream cos = new CipherOutputStream(fos, cipher);
// Have to append IV --------
cos.write(file);
fos.flush();
cos.flush();
cos.close();
fos.close();
Любые предложения о том, как это сделать?
У меня нет большого опыта в этом, но не будет ли зашифрован IV с файлом, если это будет сделано так? Если да, то как я могу использовать Encrypted IV для дешифрования файла? – champskee
CipherOutputStream работает поверх FileOutputStream и оба являются последовательными. Если вы пишете что-то в FileOutputStream и затем присоединяете CipherOutputStream, он не знает, что было написано. Обратное работает так же. Таким образом, вы создаете экземпляр FileInputStream, читаете 16 байтов и затем создаете объект Cipher из ключа и IV, а затем присоединяете CipherInputStream к FileInputStream. –
Благодарим за помощь. Очень ценим! – champskee