我的Java应用程序操纵了一个密码,该密码最终用于加密文件。
我将其加载到结构中

public char[] password;


因为我在秋千JPasswordField中看到了它。

我想这为防止内存扫描密码增加了一定程度的保护。
我认为这只是一个“模糊”级别,不是真正的保护。
在我看来,这很有用,因为它对许多琐碎的扫描仪都有效。
事情是这样吗,还是我错过了什么?

最佳答案

某些人偏爱使用char[]而不是String的原因是,使用密码后,可以清除窗口中的char[],以缩小密码,当密码出现在核心转储中或由于绑定检查从缓冲区读取失败而暴露出来时。

但是,出于多种原因,它对于JPasswordField效果不佳:


GC可以移动对象,而不必立即消隐原始副本。
JPasswordField通常与ActionListener一起使用,ActionEventDocument中将密码作为命令字符串接收。
JPasswordField实现可以进行复制。
人们在提取char[]之后忘记将空白。
您可能需要花费更多重要的安全事项(例如机场检查员注意瓶装水并让炸弹零件通过)。


在专业方面,您会获得一个清单列表功能,而不必解释自己,因为您正在执行“最佳实践”。

09-27 03:16