在 Swing 中,密码字段有一个 getPassword()
(返回 char[]
)方法,而不是通常的 getText()
(返回 String
) 方法。同样,我遇到了不要使用 String
来处理密码的建议。
为什么 String
在密码方面会对安全构成威胁?
感觉用char[]
不方便。
最佳答案
字符串是不可变的。这意味着一旦您创建了 String
,如果另一个进程可以转储内存,则没有办法(除了 reflection )您可以删除 garbage collection 之前的数据。开始。
使用数组,您可以在完成数据后显式删除数据。您可以用任何您喜欢的内容覆盖数组,密码不会出现在系统中的任何地方,甚至在垃圾回收之前也是如此。
所以,是的,这是一个安全问题 - 但即使使用 char[]
也只会减少攻击者的机会窗口,而且它只针对这种特定类型的攻击。
如评论中所述,垃圾收集器移动的数组可能会在内存中留下数据的杂散副本。我相信这是特定于实现的——垃圾收集器可能清除所有内存,以避免这种事情发生。即使是这样,char[]
仍然有时间包含实际字符作为攻击窗口。
关于java - 为什么 char[] 优于 String 作为密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116528/