java - 为什么 char[] 优于 String 作为密码?

标签 java string security passwords char

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

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

最佳答案

字符串是不可变的。这意味着一旦您创建了 String,如果另一个进程可以转储内存,则没有办法(除了 reflection )您可以删除 garbage collection 之前的数据。开始。

使用数组,您可以在完成数据后显式删除数据。您可以用任何您喜欢的内容覆盖数组,密码不会出现在系统中的任何地方,甚至在垃圾回收之前也是如此。

所以,是的,这一个安全问题 - 但即使使用 char[] 也只会减少攻击者的机会窗口,而且它只针对这种特定类型的攻击。

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

关于java - 为什么 char[] 优于 String 作为密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116528/

相关文章:

security - 客户端浏览器上的密码散列

security - EC2 上我的 pem key 文件在哪里?

JAVA:接口(interface)可以有非抽象方法吗?

java - 错误: no resource identifier found for attribute 'text direction' in package 'android'

java - 如何获取已终止的 Java 线程的中断状态?

python - 将数字和字符串列表转换为单个字符串 python

vb.net - 使用 SHA256 + SHA512 哈希作为密码?

java基础问题

java - 如何退出循环并随后打印文本

c# - 将 List<T> 添加到另一个 List<T> 的开头