为什么密码比字符串更喜欢char []?
在Swing中,密码字段具有getPassword()
(returns char[]
)方法,而不是通常的getText()
(returns String
)方法。同样,我也遇到了不建议使用String
密码的建议。
为什么String
涉及密码安全性受到威胁?使用起来感觉不方便char[]
。
回答:
字符串是不可变的。这意味着一旦创建了String
,如果另一个进程可以转储内存,则除了反射之外,你将无法清除数据,然后再进行垃圾回收。
使用数组,你可以在使用完数据后显式擦除数据。你可以用任何你喜欢的东西覆盖阵列,并且即使在垃圾回收之前,密码也不会出现在系统中的任何位置。
因此,是的,这是一个安全性问题-但是即使char[]
只使用,也只会减少攻击者的机会窗口,并且仅用于这种特定类型的攻击。
如注释中所述,垃圾回收器移动的数组可能会将数据的零散副本保留在内存中。我相信这是特定于实现的-垃圾收集器可能会清除所有内存,以免发生这种情况。即使这样做,仍然有一段时间char[]
包含实际角色作为攻击窗口。
以上是 为什么密码比字符串更喜欢char []? 的全部内容, 来源链接: utcz.com/qa/397501.html