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

当涉及到口令时,为什么String会对安全构成威胁? 使用char[]感觉不方便.

推荐答案

Strings are immutable.这意味着,一旦你创建了String,如果另一个进程可以转储内存,那么在garbage collection启动之前,你就无法(除了reflection之外)清除数据.

使用数组,您可以在处理完数据后显式擦除数据.您可以使用您喜欢的任何内容覆盖数组,并且密码不会出现在系统中的任何位置,甚至在垃圾收集之前也不会出现.

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

正如注释中所指出的,垃圾收集器移动的数组可能会在内存中留下数据的散乱副本.我相信这是特定于实现的——垃圾收集器may会在运行时清除所有内存,以避免此类事情.即使是这样,仍然有一段时间,在这段时间里,char[]包含实际的角色作为攻击窗口.

Java相关问答推荐

使用Apache Poi MQLSlideShow,在XSLFTable表中,我们可以在文本段落后面的每个单元格中包含圆角矩形吗?

将linkedHashMap扩展到Java中的POJO类

从技术上讲,OPC UA客户端是否可以通过转发代理将请求通过 tunel 发送到OPC UA服务器?

Java List with all combinations of 8 booleans

S的字符串表示是双重精确的吗?

如何才能使我的程序不会要求两次输入?

调用引发泛型异常的泛型方法时出现编译错误

呈现文本和四舍五入矩形时出现的JavaFX窗格白色瑕疵

如何从日志(log)行中删除包名称?

虚拟线程应该很快消亡吗?

如何用内置Java从JavaFX应用程序中生成.exe文件?

我如何为我的Java抵押贷款代码执行加薪操作(&Q)

Java中HashSet的搜索时间与TreeSet的搜索时间

用于Java的Visual Studio代码完成不起作用

在Spring Boot中使用咖啡因进行缓存

如何通过用户ID向用户发送私信

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

javax.crypto-密码对象-提供者服务是如何工作的?

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题

使用原子整数的共享计数器并发增量