Как записать зашифрованные данные в текстовый файл?

У меня есть проект, в котором мы записываем небольшое количество данных в файл каждые 5 минут. Идея состоит в том, чтобы посмотреть, как эти данные меняются в течение часов, дней и недель.

Одним из требований является хранение этих данных в безопасном формате. У нас уже есть схема шифрования для отправки этих данных по сети в виде массива byte[] через потоки ввода/вывода данных.

У меня есть вопрос: есть ли способ записать зашифрованные массивы byte[] в текстовый файл таким образом, чтобы я мог их прочитать? Моя самая большая проблема на данный момент заключается в том, что я читаю строки из файлов, что портит массивы byte[].

Любые мысли или указатели о том, куда идти?


person Kyte    schedule 17.04.2014    source источник
comment
да. проблема, с которой вы столкнетесь, заключается в том, что вам понадобится ключ дешифрования в вашем приложении, поэтому, возможно, кто-то его получит   -  person njzk2    schedule 17.04.2014
comment
возможный дубликат Как я могу написать байтовый массив в файл на Java?   -  person 2rs2ts    schedule 17.04.2014
comment
См., в частности, этот ответ.   -  person 2rs2ts    schedule 17.04.2014
comment
@2rs2ts, а не дубликат, потому что мы просто хотим добавить к файлу зашифрованный массив byte[]. Мы не записываем массовые данные в файл. Мы постепенно добавляем новые зашифрованные массивы byte[]. Дайте мне знать, если мне нужна дополнительная информация в вопросе!   -  person Kyte    schedule 17.04.2014
comment
Используйте Files.write с StandardOpenOption.APPEND, поэтому вы добавите в файл. Для чтения вы можете использовать Files.readAllBytes и затем проанализируйте, или, конечно, вы можете использовать FileInputStream.   -  person 2rs2ts    schedule 17.04.2014
comment
Мне кажется, вы спрашиваете, как писать и читать бинарные файлы. есть ли способ записать зашифрованные массивы byte[] в текстовый файл таким образом, чтобы я мог прочитать их обратно? Прекратите читать ваши файлы, как если бы они были текстовыми файлами, и вы добьетесь успеха.   -  person 2rs2ts    schedule 17.04.2014


Ответы (2)


Что вам нужно сделать, это взять ваши данные и поместить их в массив байтов. Затем, когда он находится в массиве байтов, вы можете зашифровать его с помощью алгоритма шифрования. Потом пишешь в файл.

Когда вы хотите вернуть исходные данные, вам нужно прочитать массив байтов из файла, затем расшифровать массив байтов, и тогда у вас будут исходные данные. Вы не можете просто прочитать эти данные в виде строки, потому что ваш алгоритм шифрования будет создавать байты, которые не могут быть представлены в виде обычных символов, поэтому ваши данные будут перепутаны.

Просто убедитесь, что вы читаете зашифрованные данные как массив байтов, а не строку, вот где у вас возникла проблема.


Если вы хотите записать несколько массивов байтов в один файл, вам, вероятно, следует сделать что-то подобное, поскольку вы используете Java:

writer.print(arr.length);
writer.print(arr);
writer.flush();

Сделайте это для каждого массива байтов. Затем, когда вы читаете массивы байтов назад:

int length = reader.readInt();
byte[] bytes = new byte[length];
// fill array

Таким образом, файл может быть структурирован следующим образом:

[длина следующего массива][массив][длина второго массива][второй массив]

Вы сможете расположить все массивы байтов вплотную друг к другу, и, поскольку каждый массив начинается с длины массива, вы будете знать, сколько данных нужно поместить в каждый массив.

person John    schedule 17.04.2014
comment
Когда данные зашифрованы, возвращается массив byte[]. Так что это у нас уже есть. Вопрос в том, как записать несколько массивов byte[] в файл и как их прочитать. Чтение отдельных массивов байтов из файла является частью вопроса - person Kyte; 17.04.2014

См. Как добавить к зашифрованному файлу AES пример примера Java AES+CBC, который позволяет открывать уже зашифрованный файл и добавление большего количества зашифрованных данных во вход, не требуя при этом какой-либо специальной обработки при их расшифровке, поскольку это выглядит так же, как если бы весь файл был зашифрован только один раз.

person simpleuser    schedule 04.03.2019