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

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

为什么String涉及密码安全性受到威胁?使用起来感觉很不方便char[]

解决方案:

字符串是不可变的。这意味着一旦创建了String,如果另一个进程可以转储内存,则除了反射之外,您将无法清除数据,然后再进行垃圾回收。

使用数组,您可以在使用完数据后显式擦除数据。您可以用任何您喜欢的东西覆盖阵列,并且即使在垃圾回收之前,密码也不会出现在系统中的任何位置。

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

如评论中所述,垃圾回收器移动的数组可能会将数据的零散副本保留在内存中。我相信这是特定于实现的-垃圾收集器可能会清除所有内存,以免发生这种情况。即使是这样,仍然会有一段时间char[]包含实际角色作为攻击窗口。

本文首发于java黑洞网,csdn同步更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值