我的Java应用程序操纵最终用于加密文件的密码。 我将它加载到结构中
public char[] password;
因为我在摇摆JPasswordField
中看到了它。
我认为这为密码的内存扫描增加了一定程度的保护。 我认为这只是一个“默默无闻”的水平,而不是真正的保护。 在我看来,这是有用的,因为它对许多琐碎的扫描仪有效。 做的事情是这样的,还是我错过了什么?
答案 0 :(得分:3)
有些人首选使用char[]
代替String
的原因是,当密码出现在核心转储中或通过密码暴露时,可以在使用缩小窗口后清除char[]
绑定检查失败从缓冲区读取。
但是,由于多种原因,它对JPasswordField
的效果不佳:
JPasswordField
通常与ActionListener
一起使用,后者在ActionEvent
中接收密码作为命令字符串。Document
实施可以制作副本。JPasswordField
后,人们忘记将char[]
空白。在专业方面,您会获得一个勾选清单功能,而不必自己解释,因为您正在进行最佳实践。
答案 1 :(得分:2)
正如其他人所说,char[]
与String
相比没有真正的安全优势。但是,char[]
确实比String
个对象提供了这些好处:
toString()
方法不会泄露其内容)答案 2 :(得分:1)
你的意思是你认为char []比扫描内存的人更安全吗?嗯,不。在内部,String将其文本保存在char []中。它们看起来完全一样。
我想你可以加密内存中的密码以防止这种情况发生。但是大概你必须在加密之前以纯文本的形式阅读它,所以在一段时间内它仍然会以纯文本形式存在。我想如果你期望你的操作花费很多时间,那么在内部加密密码以减少曝光可能会有一些价值。