Java控制台; readPassword,数组如何防止确定密码值?

Jim*_*mmy 11 java passwords console

我正在读java.io.Console一本java认证书中的课程,可能我错过了前一章的基本内容,但有人可以解释下面的内容吗?

它提到,该readPassword方法返回一个字符数组而不是String,以防止潜在的黑客找到此String然后找到密码.

字符数组如何更安全?如果您可以获取数组中的值,那么您是否可以创建一个脚本来循环遍历各种组合并最终找到密码?

And*_*yle 13

文档:

Console对象通过其readPassword方法支持安全密码输入.此方法有助于以两种方式保护密码输入.首先,它抑制回显,因此密码在用户屏幕上不可见.其次,readPassword返回一个字符数组,而不是String,因此密码可以被覆盖,一旦不再需要就将其从内存中删除.

这里的想法是,一旦验证了密码,就可以调用Arrays.fill(或等效的)来"清空"char数组,从那时起,密码就不再存储在内存中.由于字符串是不可变的,因此字符串将保留在堆中,直到它被垃圾收集 - 如果它设法自己实现内部将永远不会,并且在任何其他情况下仍然可能"太长".它一直存在,它可能容易受到各种载体的嗅探.