假设我正在编写一个 Java 应用程序,它连接到数据库以在允许应用程序运行之前对用户进行身份验证。我需要存储数据库的 URL、用户名、密码和数据库名称。显然,任何人都可以反编译应用程序并查看信息并使用它来对付我。即使混淆也行不通。如何安全地将个人信息硬编码到 Java 程序中?
注意:这是一个假设,所以请不要告诉我任何特定于数据库信息存储的内容。
假设我正在编写一个 Java 应用程序,它连接到数据库以在允许应用程序运行之前对用户进行身份验证。我需要存储数据库的 URL、用户名、密码和数据库名称。显然,任何人都可以反编译应用程序并查看信息并使用它来对付我。即使混淆也行不通。如何安全地将个人信息硬编码到 Java 程序中?
注意:这是一个假设,所以请不要告诉我任何特定于数据库信息存储的内容。
你不能。完全隐藏您提供的信息是不可能的,因为您需要使用它并因此找到它。
如果您真的不想提供访问受限的用户名和密码,请不要使用远程数据库连接。相反,您可以将用户输入的登录名和密码发送到服务器应用程序,该应用程序将读取查询您的数据库。
我认为一个好方法是拆分应用程序表示和逻辑。应用程序只呈现数据,这些数据是使用公共公开函数检索的,可能是 Web 服务或 API,或者您想要遵循 Façade_pattern(服务外观或会话外观)的任何逻辑。
这可以通过使用例如 RMI 或 EJB 轻松获得。在逻辑部分,您连接到磁盘/您的手机/其他任何东西上的数据库/xml,但这将在一台无法从外部访问的机器上完成,如果不是远程调用的话。
在您的客户端(可以是 java 程序、网站、电话应用程序的演示文稿)和逻辑(在您的服务器上)之间可能有防火墙或您想要的任何保护。顺便说一句,在服务器端,您可以加密 EJB(访问数据库)中的数据,但不会在外部显示。
我的意思是不知道事情是如何实现的,客户端不知道远程方法在做什么,它只是取回数据,仅此而已。
我认为扩展一点这个概念可能会起作用,这只是一个粗略的想法。
如何使用公钥加密登录数据并将其保存到您的 java 程序 A 中,与其他人共享。A 将加密数据传输给程序 B(B 在安全服务器上保密);B 使用您的私钥解密信息并验证程序 A 以连接到数据库。