Запись закодированных объектов в файл - PullRequest
0 голосов
/ 26 октября 2009

Я ищу низкоуровневое шифрование для написания вопросов / ответов для тестового / экзаменационного приложения на Java. Оба вопроса и экзамен являются объектами. По сути, мне нужен способ сериализации объекта, записи его в файл и шифрования всего, чтобы никто не мог прочитать вопрос / ответы без моей программы.

Я слышал о протокольных буферах (http://code.google.com/apis/protocolbuffers/docs/javatutorial.html),, но не уверен, есть ли что-то более новое / лучшее или это следующая лучшая вещь.

Приветствие -Tanner

Ответы [ 2 ]

4 голосов
/ 26 октября 2009

Вам нужно два шага - сериализация / десериализация, которая преобразует объект в представление, которое может быть сохранено на диске; и шифрование / дешифрование, которое шифрует представление на диске.

В Java вы можете использовать ObjectOutputStream для выполнения сериализации и CipherOutputStream для выполнения шифрования. Сначала получите FileOutputStream, затем передайте его конструктору CipherOutputStream, затем передайте , что , конструктору ObjectOutputStream. Затем вы можете просто передать свои Сериализуемые объекты на ObjectOutputStream, и они будут в конечном итоге сериализованы, зашифрованы и записаны в файл. (Вам, конечно, потребуется выполнить дополнительную настройку хотя бы для объекта CipherOutputStream, но это основная идея).

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

0 голосов
/ 26 октября 2009

Судя по вашему описанию приложения, производительность не имеет значения. Таким образом, решение, которое сериализуется в XML (например, с использованием XStream), а затем шифрует XML, будет соответствовать вашим требованиям.

Однако я должен предупредить вас, что существует значительный риск , что учащийся с достаточным стимулом может взломать ваше шифрование. Я могу думать только о том, как вы можете защититься от этого:

  1. вообще не хранит зашифрованные данные на компьютере пользователя или
  2. используйте асимметричный шифр и никогда не выполняйте расшифровку на компьютере пользователя.

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

...