1.0 为什么密码比字符串更喜欢char []? | Java Debug 笔记

1.0 为什么密码比字符串更喜欢char []? | Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

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

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

为什么String涉及密码安全性受到威胁?使用字符数组看起来感觉很不方便。

热门回答:字符串是不可变的。这意味着一旦创建了String,如果另一个进程此时转储内存(惊了,这竟然真的是专有名词,其实就是将内存中的数据写入到磁盘中,并发环境下多个进程之间切换时,将上一个进程的内存写入磁盘,并将新进程所需的数据从磁盘中装载到内存上,实现出一个虚拟内存的效果),则此时除了反射之外,您将无法清除数据,并进行垃圾回收。

使用数组,您可以在使用完数据后显式擦除数据。您可以使用任意内容覆盖数组,即使在垃圾回收之前(擦除数据后),密码也不会在系统中的任何位置出现。

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

如评论中所述,垃圾回收器可能会将数据的零散副本保留在内存中。我相信,为了避免这种情况的发生,在该类场景下,一定会有特殊实现的垃圾收集器——他们工作时会清除所有内存。但即使这样做,字符数组仍然有一段时间是正存储着密码,此刻程序遭受攻击依旧会造成密码泄露。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部