В настоящее время я работаю над небольшой программой на Java / Kotlin, которая записывает настройки и некоторые данные в файл JSON. Я хочу реализовать функциональность для шифрования этого файла с помощью AES. Шифрование файла с помощью AES не представляет никакой проблемы.
До сих пор я делал это следующим образом (имя файла - это путь к файлу желаемого файла сохранения из «диалога сохранения файла», «он» происходит из файлаOutputStream. используйте с именем файла, являющимся целью, superCategory - это JSONNode для записи):
//in the end write the stuff to the file
objectMapper.writerWithDefaultPrettyPrinter().writeValue(it, superCategory)
//TODO encrypt? best case: encrypt before ever writing to a file
if(encrypt) {
//up to now I don't know how to get a stream from objectMapper instead of doint it this way
val infile = File(filename)
val outfile = File(filename+"_enc")
AESfileCrypto.doEncryption(password = password, inputFile = infile, outputFile = outfile)
infile.delete()
}
AESfileCrypto - это самописанный класс, который шифрует входной файл в выходной файл, оставляя входной файл нетронутым. Как вы можете видеть из моих комментариев, мне совсем не нравится делать это таким образом. Кажется, довольно уязвимым является простое шифрование файла и последующее удаление незашифрованного.
Я бы очень хотел зашифровать материал перед тем, как что-нибудь записать. Есть ли какой-то способ получить FileInputStream из objectMapper вместо прямой записи в файл? Или есть другой способ написать зашифрованный файл JSON?