Как правильно зашифровать файл JSON, написанный Джексоном - PullRequest
0 голосов
/ 04 октября 2019

В настоящее время я работаю над небольшой программой на 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?

1 Ответ

1 голос
/ 04 октября 2019

Запишите вывод Джексона в ByteArrayOutputStream. Затем зашифруйте эти байты, если необходимо, и запишите их в файл, выбранный пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...