Я вижу 2 проблемы с вашим решением:
Ваш код:
int numBtyes = fis.available();
byte[] bytes = new byte[numBtyes];
fis.read(bytes);
Это на самом деле не гарантирует, что весь контент будет прочитан. Кроме того, при шифровании больших файлов (когда нет гарантии, что они поместятся в память), вы можете не захотеть читать весь контент в память.
При шифровании / дешифровании большого контента (без ограничений) вы можете захотеть использовать что-то вроде:
byte[] buff = new byte[BUFFERSIZE];
for(int readBytes=in.read(buff); readBytes>-1;readBytes=in.read(buff)) {
out.write(cipher.update(buff,0, readBytes);
}
out.write(cipher.doFinal());
или взглянуть на CipherOutputStream и CipherInputStream
Сравнение другой проблемы:
String largeFileStringToCheck = new String(largeFileBytesToCheck);
Как уже отмечалось, это ужасный способ сравнения контента. В Java строка предназначена только для печатных символов, при попытке «зачеркнуть» любой байтовый массив применяется кодировка, а непечатные символы могут быть «выброшены».
для простого сравнения (с байтом) массивов), вы можете использовать Arrays.equals метод
При сравнении ДЕЙСТВИТЕЛЬНО большого контента (если вы не уверены, что он уместится в вашей памяти RAM), обычно это хорошая идея создайте сообщение ha sh и сравните хэши
Редактировать: если вы действительно хотите увидеть / распечатать / сравнить зашифрованный текст как строку, вы можете закодировать двоичные данные, вы можете иметь взглянем на кодировку Base64 .