回答

收藏

为什么 char[] 优于 String 的密码?

技术问答 技术问答 347 人阅读 | 0 人回复 | 2023-09-11

在 Swing 中间有一个密码字段getPassword()(returns char[] 方法,而不是通常getText()(returns String)方法。同样,我遇到了一个不用于的人。String建议处理密码。
7 ~' U0 p* I4 B8 w为什么String对密码的安全构成威胁?使用起来不方便char[]。) o+ p6 i6 N( n$ P: n, P, x
                                                                % d( o5 P4 U- c0 j/ p7 |: V$ T
    解决方案:                                                               
; `$ R3 y# @+ m5 H  W; [                                                                字符串是不可变的。这意味着一旦你创建了它String,如果另一个过程可以转移到内存中,那么在垃圾收集开始之前,无法摆脱数据。
/ \( m! q0 J/ l# }9 ^, ^- i使用数组,您可以在完成后显式地擦除数据。您可以用您喜欢的任何东西覆盖数组,密码不会出现在系统的任何地方,甚至在收集垃圾之前。( }2 y% q5 H' D7 B+ ]& C. t
所以是的,这是一个安全问题——但即使使用也是如此char[]只会减少攻击者的机会之窗,只适用于这种特定类型的攻击。
$ R. e- s. U1 z如评论所述,垃圾收集器移动的数组可能会在内存中留下数据的杂散副本。我相信这是特定于实现的 - 垃圾收集器可以随时清除所有内存,以避免这种情况。即便如此,它仍然存在char[]包含实际字符作为攻击窗口的时间。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则