在回答这个问题之前,我必须说,我知道在客户端应用程序中硬编码密码是一种不好的做法,原因有很多。关于这个问题还有其他问题。这个问题的范围更窄,假设身份验证凭据必须驻留在客户端应用程序的代码上,原因是您无法控制的。
如果某些方法优于其他方法(例如:JPasswordField将密码存储在字符数组而不是字符串中),并且如果必须在Java应用程序中对其进行硬编码,您可以采取哪些措施使其更难获取?
更新:
该应用程序的一个实例在远程pc上运行,最终用户拥有管理权限。凭据用于访问同一网络中的数据库,因此实际密码已经预先确定,必须在实际代码中手动输入。
我想最不理想的解决方案是,如果你可以使用随机元素的基于挑战的认证协议。
这样,它不仅仅是密码,它也是使用密码生成正确响应的代码,这需要逆向工程。
然后它也可以是双向身份验证,也就是说,您的终端可以验证另一方是否也使用相同的协议/算法,以及是否拥有相同的密码。
最重要的是,密码永远不会通过网络发送,所以不能被监听。
Diffie-Helman密钥交换是一种广泛使用的协议,但如果您只想实现隐晦性,而不是真正的安全性,您可以随时推出自己的简单实现。好吧,如果所有东西都可以从字节码反编译和反向工程,那么真正的安全性显然是不可能实现的,但无论如何……:)
一般来说,你不应该存储密码(当然)。
如果您需要在运行时提供密码,那么最佳实践(如Jez Humble在《持续交付》一书中提倡的那样)是在部署/启动时提供密码。这样一来,密码只能存在于人们的头脑中,而不是某个不安全的文件中。
我不知道这对你来说是否可行,但你应该朝着这个目标努力。
.... 如果必须在Java应用程序中对其进行硬编码,可以采取哪些措施使其更难获取?
首先,我要确保对做出这个糟糕决定负有管理责任的人充分意识到这从根本上是不可挽回的不安全的。
然后,我可能会想出一些naff算法,以一种模糊的方式组装密码;例如,通过构建两个字节数组并将它们XORing在一起...并分发模糊的字节码。你能希望做的最好的事情就是让技能有限的人很难从你的代码中逆向工程密码。
(用强算法加密密码不会有多大帮助,因为算法的选择和解密密钥都必须嵌入到代码中。事实上,任何你能想到的方案都可以通过使用调试器在密码需要清除的地方设置断点来击败。)
1。。。即使是乔恩·斯基特也无法保证它的安全
如果某些方法优于其他方法(例如:JPasswordField将密码存储在字符数组而不是字符串中)。。。
我只想指出,使用char数组在JPasswordField等中保存密码的正常推理是为了防止坏人从核心转储或交换文件中读取密码。在这种情况下,它不会真的有帮助,因为我们必须假设你应该担心的坏人是具有系统管理员访问权限的simeone。他或她将有足够的控制权将调试器附加到JVM并从char数组捕获字节。
我知道在java源代码中以字符串形式存储密码是不安全的。通常,最好将其存储在具有char[]类型的变量中。以以下形式存储密码安全吗? 字符串“my password”是否出现在编译的java类文件中?在我看来,在编译源代码之后,“我的密码”不会出现在我的类文件中。但我仍然不能100%确定我可以使用描述的表示来存储密码。 我能否安全地使用这个结构,并确保密码受到保护,除非有人从源代码中获取密码? 编
问题内容: 在Java桌面应用程序中存储密码的推荐方式是什么? 我希望用户只能输入一次凭证,而不会再次提示。 在个人项目中,我一直在使用Preferences API,但我假设这与以纯文本格式存储(安全方面)没有什么不同。 非常感谢 编辑: 非常感谢您的建议。毫无疑问,这似乎有些混乱,因为我可能还没有把问题弄清楚。 我将给出一个假设的情况: 假设我正在为远程数据库创建一个简单的前端,该前端使用用户
我对源代码中的密码有一个问题。例如,如果你想连接到FTP服务器,你必须在源代码中以纯文本形式写入密码。这安全吗?或者可以反编译JAR文件或Android APK文件,以获取纯文本格式的数据吗?有没有安全的方法来存储数据?
问题内容: 我是Android开发和实现SSLSockets的新手。经过一些挖掘后,我能够设置一个可以正常工作的简单服务器/客户端。我觉得该实现可能需要花费一些工作,并且在不使用纯文本格式的情况下困扰于如何将密码加载到密钥库中。这是客户端上的一些代码。如您所见,我已将密码硬编码到本地变量中。有没有更好的方法来加载密钥库密码,所以我在代码中没有纯文本格式? 更新: 事实证明,客户端根本不需要知道密钥
有人能解释这些代码吗?为什么它有<code>在那里?
问题内容: 我正在使用许多静态HTML网站管理旧版网站,没有服务器端脚本,只有纯HTML / CSS,最少的javascript。我发现,在不同页面中多次更改同一段代码非常浪费时间。例如,当菜单中的某些内容发生更改时,由于菜单只是每个文档中的静态文本,因此我必须多次进行相同的更改。 我想知道什么是最好的策略,以最大程度地减少这种开销,换句话说,对于跨多个静态HTML页面管理导航代码之类的建议,您会