为什么Java中的密码的char []优先于String?

问题:

在Swing中,密码字段具有getPassword()(返回char[])方法,而不是通常的getText()(返回String)方法。同样,我遇到了一个不使用String来处理密码的建议。
为什么String对密码构成安全威胁?
使用char[]感到不方便

回答:

 字符串是不可变的。这意味着,一旦您创建了String,如果另一个进程可以转储内存,除了garbage collection之外,没有办法(除了reflection)可以摆脱数据。
使用数组,您可以在完成数据后显式擦除数据。您可以使用任何您喜欢的内容覆盖阵列,即使在垃圾回收之前密码也不会出现在系统的任何位置。
那么是的,这个is的一个安全问题 – 但即使使用char[]只会减少攻击者的机会之窗,只有这种特定类型的攻击。
如注释所述,垃圾回收器移动的数组可能会将数据的杂项副本留在内存中。我相信这是实现特定的 – 垃圾收集器may清除所有内存,以避免这种事情。即使是这样,仍然有一段时间,char[]包含实际的字符作为攻击窗口。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why is char[] preferred over String for passwords in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 1 = 6