我在 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/