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

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

万俟嘉珍
2023-03-14
问题内容

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

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


问题答案:

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

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

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

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



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

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

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

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

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

  • 问题内容: 节点程序员通常使用这样的范例: 为什么不简化该函数以仅接受一个参数(错误或响应)呢? 似乎更简单。我唯一看到的缺点是函数不能将错误返回为它们的实际预期返回值-但我认为这是一个非常微不足道的用例。 为什么错误优先模式被认为是标准的? 编辑:的实现: 另一个编辑:是否有可能我的替代方法比节点约定更方便,因为仅接受一个参数的回调也更有可能在非回调用例中重用? 问题答案: (有关使用该问题的回