Я пытаюсь написать простую программу для шифрования и дешифрования файлов с использованием алгоритма AES. Позже предполагается использовать разделенную простую программу на методы шифрования и дешифрования в более сложной программе.
Он является частью программы шифрования:
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(128);
SecretKey key = kg.generateKey();
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE, key);
FileInputStream fis; FileOutputStream fos; CipherOutputStream cos;
fis = new FileInputStream("FileTo.encrypt");
fos = new FileOutputStream("Encrypted.file");
//write encrypted to file
cos = new CipherOutputStream(fos, c);
byte[] b = new byte[16];
int i = fis.read(b);
while (i != -1) {
cos.write(b, 0, i);
i = fis.read(b);
}
cos.close();
//write key to file
byte[] keyEncoded = key.getEncoded();
FileOutputStream kos = new FileOutputStream("crypt.key");
kos.write(keyEncoded);
kos.close();
Вот часть расшифровки:
//Load Key
FileInputStream fis2= new FileInputStream("a.key");
File f=new File("a.key");
long l=f.length();
byte[] b1=new byte[(int)l];
fis2.read(b1, 0, (int)l);
SecretKeySpec ks2=new SecretKeySpec(b1,"AES");
Cipher c1 = Cipher.getInstance("AES");
c1.init(Cipher.DECRYPT_MODE, ks2);
FileInputStream fis1=new FileInputStream("Encrypted.file");
CipherInputStream in= new CipherInputStream(fis1,c1);
FileOutputStream fos0 =new FileOutputStream("decrypted.file");
byte[] b3=new byte[1];
int ia=in.read(b3);
while (ia >=0)
{
c1.update(b3); //<-------remove this
fos0.write(b3, 0, ia);
ia=in.read(b3);
}
in.close();
fos0.flush();
fos0.close();
Теперь проблема в том, что часть дешифрования не расшифровывает последние биты, некоторые биты отсутствуют. Мне кажется, что он дешифрует только каждые 16 байтов, но переменная в (cipherinputstream) возвращает -1, когда она должна возвращать последние байты.
Как мне получить последние биты?
Заранее спасибо
Отредактировано: добавлен комментарий, чтобы указать, что должно быть удалено. Вот некоторый код для правильного (т.е. без загрузки всего файла в java) шифрования и дешифрования файла в Java с использованием AES. Можно добавить дополнительные параметры (отступы и т. Д.), Но вот основной код.