Стратегия сохранения объектов для настольных приложений - PullRequest
3 голосов
/ 26 декабря 2008

Я занимаюсь разработкой настольного приложения на основе Java. Есть некоторые данные, сгенерированные из объектной модели приложения, которые мне нужно сохранить (желательно в файл). Существует также требование защищать сохраняемый файл, чтобы другие не могли получить данные объектной модели из данных. Какова лучшая стратегия для этого? У меня сложилось впечатление, что эти требования очень распространены для настольных приложений. Однако я не смог найти много полезной информации об этом. Любое предложение приветствуется.

Ответы [ 6 ]

2 голосов
/ 26 декабря 2008

Ваш вопрос состоит из двух частей. 1-й: Как сохранить данные? 2-й: Как их защитить?

Существует множество способов сохранения данных. От простого XML, сериализации Java до собственного формата данных. Нет способа, как предотвратить реверс инженерных данных, просто «простым текстом». Вы можете просто сделать это сложнее, но не невозможно. Чтобы сделать это совершенно невозможным, вам нужно использовать надежное шифрование, и здесь возникает проблема. Как зашифровать данные и не раскрывать безопасный токен. Если вы распространяете защищенный токен вместе со своим приложением, найти его - это только вопрос времени, и проблема решена. Поэтому ввод безопасного токена во время установки не возможен. Если пользователь должен пройти аутентификацию для использования приложения, это должно помочь, но это та же проблема. Следующим вариантом является использование настраиваемого защищенного алгоритма биекции для запутывания данных. И последний вариант - ничего не делать, просто сохранять формат данных закрытым, не публиковать их и не запутывать свое приложение, чтобы избежать обратного инжиниринга.

Наилучшим значением является простая обфускация данных (простое число XOR) с пользовательским форматом данных и запутанным приложением.

2 голосов
/ 26 декабря 2008

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

Вы также можете использовать Java DB (поставляется с java начиная с версии 1.5) и инструмент ORM для этого, такой как Hibernate.

EDIT

В комплекте с 1.6 http://developers.sun.com/javadb/

1 голос
/ 26 декабря 2008

XStream работает, если вы хотите сделать простое чтение XML и запись в файл. Xstream позволяет вам взять любой объект Java, записать его и прочитать из вашего файла.

0 голосов
/ 26 декабря 2008

Вы можете попробовать использовать встроенную базу данных, такую ​​как Berkeley DB Java Edition (http://www.oracle.com/database/berkeley-db/je/index.html).. Их API прямого постоянного слоя, скорее всего, удовлетворит ваши потребности. Содержимое базы данных синхронизируется с файлами на диске. От простого просмотра файлов непосредственно, не легко определить объектную модель из данных. У меня был хороший опыт, она молниеносна и хорошо работает с настольными приложениями.

0 голосов
/ 26 декабря 2008

Если вам действительно нужна безопасность, подразумеваемая в вашем утверждении («... защитить сохраненный файл, чтобы другие не могли извлечь данные объектной модели из данных.»), Я бы сериализовал данные в памяти (для Java сериализованная форма, XML или что-то еще), а затем зашифровать этот поток байтов в файл.

0 голосов
/ 26 декабря 2008

Я думаю, что «сериализация» - это слово:

http://java.sun.com/developer/technicalArticles/Programming/serialization/

...