在Java代码中嵌入密码的最安全方法是什么?
我必须在提出这个问题之前指出,我知道在客户端应用程序中硬编码密码是一种糟糕的做法,原因有很多。与这个问题有关的还有其他问题。此问题的范围较窄,并假设由于某些您无法控制的原因,身份验证凭据必须驻留在客户端应用程序的代码上。
如果某些方法比其他方法更好(例如:JPasswordfield将密码存储在字符数组中而不是字符串中),并且如果您必须在Java应用程序中对其进行硬编码,您可以采取哪些措施来使其更难被获取?
更新:
该应用程序的一个实例在远程PC上运行,其中最终用户具有管理员权限。凭据用于访问同一网络中的数据库,因此实际密码已经预先确定,必须在实际代码中手动输入。解决方案
...如果您必须在Java应用程序中对其进行硬编码,您可以采取哪些措施来使其更难被获取?
首先,我要确保负责做出这一糟糕决策的管理人员充分意识到这是从根本上且无可救药地不安全1。
然后我可能会想出一些naff算法,以一种模糊的方式组合密码;例如,通过构建两个字节数组并将它们进行异或运算...以及分发混淆的字节码。您所能做的最好的事情就是让技能有限的人很难从您的代码中反向工程密码。
(使用强算法加密密码不会有多大帮助,因为算法的选择和解密密钥都必须嵌入到代码中。事实上,通过使用调试器在密码需要明文的位置设置断点,您所梦想的任何方案都可能失败。)
1.即使是乔恩·斯基特也不能保证它的安全。如果某些方法比其他方法更好(例如:JPasswordfield将密码存储在字符数组中而不是字符串中)...
我只想指出,使用字符数组在JPasswordfield等中保存密码的正常理由是为了防止坏人从核心转储或交换文件中读取密码。它在这种情况下不会有真正的帮助,因为我们必须假设您应该担心的坏人是拥有系统管理员访问权限的Simeone。他或她将有足够的控制权将调试器附加到JVM并从char数组捕获字节。
相关文章