gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 05:03:41 24 4
gpt4 key购买 nike

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

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

最佳答案

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

使用数组,您可以在使用完数据后显式删除数据。您可以用您喜欢的任何内容覆盖数组,并且密码不会出现在系统中的任何位置,即使在垃圾收集之前也是如此。

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com