当前位置: 首页 > 面试题库 >

为什么java密码比字符串更喜欢使用char []?

赫连方伟
2023-03-14
问题内容

在Swing中,密码字段具有getPassword()(returns char[])方法,而不是通常的getText()(returns String)方法。同样,我遇到了不使用String密码的建议。

为什么String涉及密码安全性受到威胁?使用起来感觉不方便char[]


问题答案:

字符串不可变的。这意味着一旦创建了String,如果另一个进程可以转储内存,则除了反射之外,你将无法清除数据,然后再进行垃圾回收。

使用数组,你可以在使用完数据后显式擦除数据。你可以用任何你喜欢的东西覆盖阵列,并且即使在垃圾回收之前,密码也不会出现在系统中的任何位置。

因此,是的,这是一个安全性问题-但是即使使用,也char[]只会减少攻击者的机会窗口,并且仅用于这种特定类型的攻击。

如评论中所述,垃圾回收器移动的数组可能会将数据的零散副本保留在内存中。我相信这是特定于实现的-垃圾收集器可能会清除所有内存,以免发生这种情况。即使是这样,仍然会有一段时间char[]包含实际角色作为攻击窗口。



 类似资料:
  • 问题内容: 在Swing中,密码字段具有(returns )方法,而不是通常的(returns )方法。同样,我也遇到了不建议使用密码的建议。 为什么涉及密码安全性受到威胁?使用起来感觉不方便。 问题答案: 字符串是不可变的。这意味着一旦创建了,如果另一个进程可以转储内存,则除了反射之外,你将无法清除数据,然后再进行垃圾回收。 使用数组,你可以在使用完数据后显式擦除数据。你可以用任何你喜欢的东西覆

  • 问题内容: 复制整个数组时,我经常看到人们写: 但是在我看来,没有理由对此表示赞同: 无论如何,它们都是浅表副本。这些人可能只是不知道存在。那么有什么理由不使用吗? 问题答案: 否。 如果您 确实要进行微 基准测试,则可能取决于您正在运行的JVM。但是实际上,没有。

  • 问题内容: 我正在实现一个API,有一个方法可以传递程序从中读取资源的路径列表 我正在使用varargs使调用方法尽可能方便用户,就像这样 这是varargs的适当用法吗?还是传递数组更好? 问题答案: 在您的情况下,varargs很好。您实际上并不需要对要导入的路径进行数组处理,因为除了将它们传递给您的方法外,您不需要执行任何其他操作。 varargs功能使您不必为了将一组值传递给一次性方法而显

  • 这里有2个测量: 正如您所见,比较两个匹配的字符串比比较两个大小相同但不匹配的字符串要快。这是非常令人不安的:在字符串比较期间,我认为python是逐字符测试字符串的,所以应该比更长,因为它需要对1进行4次测试才能进行不匹配的比较。可能比较是基于哈希的,但在这种情况下,两种比较的计时应该相同。 你知道为什么吗?

  • 我有问题。我做了这个练习,但是我不知道如何在我的代码中解决最后三个问题。我需要打印失败,但我不能得到,因为我只得到OK OK,如果这就是全部。 有什么建议吗??

  • 每个人都在谈论密码中的填充方案,但需要传递给密码的实际字符串是什么?我不在乎它们是对称的还是不对称的,我只想要一个可能值的列表。