java - 保护嵌入式密码

标签 java security passwords embedded-resource copy-protection

我在 java 中有一个属性文件,我在其中存储了我的应用程序的所有信息,例如 Logo 图像文件名、数据库名称、数据库用户和数据库密码。

我可以将加密的密码存储在属性文件中。但是,可以使用反编译器从 jar 中读取 key 或密码。

有没有办法将数据库传递安全地存储在属性文件中?

最佳答案

有多种方法可以解决这个问题。如果您能想出一种方法让用户在应用程序启动时为 keystore 提供密码,最合适的方法是使用 key 加密所有值,并将该 key 存储在 keystore 中。 keystore 的命令行界面是使用 keytool。然而,JSE 也有 API 以编程方式访问 keystore 。

如果您无法让用户在启动时手动向 keystore 提供密码(比如对于 Web 应用程序),一种方法是编写一个异常复杂的混淆例程,它可以混淆 key 和也将其存储在属性文件中。要记住的重要事情是,混淆和反混淆逻辑应该是多层的(可能涉及加扰、编码、引入虚假字符等),并且本身应该至少有一个可以隐藏在应用程序其他类中的 key 使用不直观的名称。这不是一个完全安全的机制,因为拥有反编译器和相当多的时间和智慧的人仍然可以解决它,但这是我所知道的唯一一个不需要你破解 native (即不易反编译)代码的机制.

关于java - 保护嵌入式密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/102425/

相关文章:

Java:一种将 Mime(内容)类型与 CommonsMultipartFile 的文件扩展名相匹配的方法

java - 调用在不同类中抛出异常的方法

java - 丢失 JRE 7 安全警报和警告

ios - 处理连接到 Web 服务的 native 应用程序的登录功能

sql - 在存储过程中验证密码

java 验证包含数字的字符串并搜索以确保没有字符

java - 是否有可能获得同一个类中某个类的构造函数中的整数值?

javascript - 为什么 "enter"对我的表单不起作用?

asp.net - .ASPXAuth Cookie 在 session 期间发生变化

mysql - 为MariaDB根用户启用密码和unix_socket身份验证?