实现需要访问机密数据的Java桌面应用程序
我有一个Java桌面应用程序(一个可运行的jar),它可以在CD中提供给客户端。然后“autorun.inf”自动启动jar,应用程序从CD运行(因此在只读环境中运行) 此应用程序需要访问一些已知数据并以某种方式使用它们。因为应用程序是独立的,所以这些数据应该以某种文件的形式随应用程序一起分发 现在是具有挑战性的目标:实现需要访问机密数据的Java桌面应用程序,java,design-patterns,Java,Design Patterns,我有一个Java桌面应用程序(一个可运行的jar),它可以在CD中提供给客户端。然后“autorun.inf”自动启动jar,应用程序从CD运行(因此在只读环境中运行) 此应用程序需要访问一些已知数据并以某种方式使用它们。因为应用程序是独立的,所以这些数据应该以某种文件的形式随应用程序一起分发 现在是具有挑战性的目标: 这些数据只是数字列,类似于数据库表导出。访问它最方便的方式就是,如果它是一个数据库表,可以在其中对这些文件执行SQL查询 这些数据应该对用户客户保密。尽管数据必须随应用程序一起
- 这些数据只是数字列,类似于数据库表导出。访问它最方便的方式就是,如果它是一个数据库表,可以在其中对这些文件执行SQL查询
- 这些数据应该对用户客户保密。尽管数据必须随应用程序一起分发,但用户无法阅读。因此,必须以某种方式对数据进行加密或模糊处理
- 数据库引擎是否需要在某处写入文件?我已经用HSQLDB做了一些测试,我想是的。这将是一个问题,因为应用程序是从CD运行的
- 如果它真的需要这样的文件,我是否可以将它们与应用程序一起发布,而不是动态创建
- 只是确认一下,如果我使用加密的数据库,我必须在应用程序的某个地方放一个密钥,让我解密它,对吗
- 一种可能是使用加密数据库。
SQLite是一个关系数据库管理系统,其中数据库是文件
有关SQLite中的加密,请参见此处:您可以使用。
SQLite数据库文件可以在应用程序的第一次启动时创建。
您只需测试SQLite数据库文件是否已存在:
if (!new File(database_filename).exists()) {
createNewDatabase();
}
SQLite数据库的路径存储在database\u filename
变量中。
如果文件不存在,您可以将文件保存在用户的home dir中
我在我的一个应用程序中使用以下代码创建带有外部SQL脚本文件的数据库
public final void createNewDatabase() {
InputStream inputStream = getClass().getResourceAsStream("database_create_script.sql");
String sqlCommand = new Scanner(inputStream).useDelimiter("\\A").next();
try {
Statement statement = connection.createStatement();
statement.executeUpdate(sqlCommand);
} catch (SQLException ex) {
ex.printStackTrace();
}
System.out.println("Database created");
}
也支持加密。尽管我很喜欢SQLIte,但对于Java应用程序,我还是选择H2。您的目标是绝对不可能的,原因很明显:您的应用程序显然需要读取加密数据(否则为什么要费心包括它),因此必须对其进行解密,因此必须将密钥存储在某个地方 好了,你就是这样:你把加密的数据和解密它的密钥发送给客户机——怎样才能阻止他们做与你的应用程序相同的事情呢
是的,它可能会阻止一些人获取您的数据,但对于那些甚至对正在发生的事情稍有了解的人来说,这是不安全的当然,必须包含数据库解密的关键,因此它不是完全“安全的”。我想知道是否有其他方法可以避免这个问题。我理解你的观点。如果我以某种方式加密我的数据文件,那么我必须在用户端解密它们,因此也给出了解决方案。这是否也说明了加密数据库引擎,如上面例举的那样?@alves Yep确实如此。保存加密数据的唯一方法是对密钥保密()。这意味着在任何情况下都不能将密钥发送给用户-如果您这样做,希望就破灭了。这也是软件中实现的每个DRM解决方案的基本问题。因此,对于我的情况,您建议如何使密钥可用?@alves您无法在客户端解密数据。您可以通过网络从安全服务器发送解密数据。但是:现在应用程序需要某种方式从服务器请求数据,我们又遇到了同样的问题。基本上,如果你想使用用户客户端上的一些数据,他们可以访问所有这些数据——没有什么可以绕过的。数十亿美元已经投入到“安全”的数字版权管理中,你可以看到它是如何运作的