4

我正在开发一个基于 Java 的桌面应用程序。我需要保存从应用程序对象模型生成的一些数据(最好保存到文件中)。还需要保护持久文件,以便其他人无法从数据中获取对象模型详细信息。做这些的最佳策略是什么?我的印象是,这些要求对于桌面应用程序来说非常普遍。但是,我还没有找到很多有用的信息。任何建议表示赞赏。

4

6 回答 6

2

如果您不需要修改此文件,您可以将对象图序列化为文件。内容是二进制的,只能使用编写它们的类来读取。

您还可以使用 Java DB(我认为自 1.5 以来随 java 一起提供)和诸如 Hibernate 之类的 ORM 工具。

编辑

它从 1.6 http://developers.sun.com/javadb/开始捆绑

于 2008-12-26T16:37:35.467 回答
2

你的问题有两个部分。1st:如何持久化数据?第二:如何保护它们?

有很多方法可以持久化数据。从简单的 XML、java 序列化到自己的数据格式。没有办法仅仅通过“纯文本”来防止逆向工程数据。你可以让它变得更难,但并非不可能。为了使它完全不可能,您需要使用强加密,这就出现了一个问题。如何加密数据并且不泄露安全令牌。如果您正在与您的应用程序一起分发安全令牌,那么找到它并解决问题只是时间问题。因此,在安装期间输入安全令牌不是一种选择。如果用户必须通过身份验证才能使用应用程序,它应该会有所帮助,但这是同样的问题。下一个选项是使用自定义保护双射算法来混淆数据。最后一个选项是什么都不做,只是保持数据格式私有,不要'

最好的价值是使用自定义数据格式和混淆应用程序对数据进行简单的混淆(XOR 素数)。

于 2008-12-26T19:05:13.467 回答
1

如果您想对文件进行简单的 xml 读取和写入,XStream就可以工作。Xstream 允许您获取任何 java 对象并将其写入文件并从文件中读取。

于 2008-12-26T16:54:31.143 回答
0

我认为“序列化”是这个词:

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

于 2008-12-26T17:00:07.853 回答
0

如果您确实需要语句中隐含的安全性(“...保护持久文件,以便其他人无法从数据中派生对象模型详细信息。”),我会序列化内存中的数据(以 Java 序列化形式、XML 或其他),然后将该字节流加密为文件。

于 2008-12-26T18:23:39.263 回答
0

您可以尝试使用像 Berkeley DB Java 版 ( http://www.oracle.com/database/berkeley-db/je/index.html )这样的嵌入式数据库。他们的直接持久层 API 很可能会满足您的需求。数据库内容同步到磁盘上的文件。仅仅直接看文件,从数据中找出对象模型并不容易。我在这方面有过很好的体验,它速度极快,并且与桌面应用程序配合得很好。

于 2008-12-26T19:23:33.930 回答