问题

在Swing中,密码字段有一个getPassword()(返回char[])方法而不是通常的getText()(返回String)方法.类似地,我遇到了一个不使用String来处理密码的建议.

为什么String在密码方面对安全构成威胁? 使用char[]感觉不方便.

  最佳答案

字符串是不可变的.这意味着一旦您创建了String,如果另一个进程可以转储内存,则没有办法(除了反射)您可以在垃圾收集之前摆脱数据.

使用数组,您可以在完成数据后显式擦除数据.您可以用您喜欢的任何东西覆盖数组,即使在垃圾收集之前,该密码也不会存在于系统的任何地方.

所以是的,这是一个安全问题 – 但即使使使用char[]也只会减少攻击者的机会窗口,它只适用于这种特定类型的攻击.

如评论中所述,垃圾收集器移动的数组可能会将数据的杂散副本留在内存中.我相信这是特定于实现的 – 垃圾收集器可能会清除所有内存,以避免这种事情.即使它这样做,仍然有时间char[]包含实际字符作为攻击窗口.

  相同标签的其他问题

javastringsecuritypasswordschar