【发布时间】:2015-04-28 15:33:16
【问题描述】:
我目前正在学习 JavaFX,我对 JavaFX 中的 PasswordField 没有返回密码的字符甚至字节数组的方法有点困惑。相反,我必须使用返回字符串的 getText()。
如您所见,hereswing 决定将 getText() 方法标记为已弃用,并告诉程序员改用 getPassword(),它会返回一个 char 数组。
如果我没有正确理解,那么 char 数组要安全得多,因为您可以通过将所有值设置为 0 从 RAM 中完全擦除它们。那么为什么 Oracle 决定在 JavaFx 中使用字符串?是否有一些新方法可以从堆中删除字符串?
编辑:据我所知,char 密码更省钱,因为我们可以随时删除它们(覆盖它们),而字符串不是这种情况。
【问题讨论】:
-
听起来你说没有
getPassword()方法,只有getText()方法,你读过的最近已弃用。您是否使用过时的 JavaFX 库?这可以解释为什么您看不到该方法可用 -
@mmcrae 不,JavaFX 8 中的 passwordField 没有 getPassword 方法,您可以在这里看到:link
-
我不会说 char 数组远更安全。无论数据类型如何,您都在 VM 的内存空间中工作。请查看此related post 及其 cmets 了解更多信息。
-
@OttPrime Char 数组更安全,因为您可以覆盖它们,这意味着密码在 ram 中只有一瞬间。
-
如果这对您的应用程序来说是一个重要的安全问题,我的建议是创建您自己的 SecurePasswordField 类,该类不将密码存储在字符串中并将其提供给第三方ControlsFX project。如果您选择跟进,也许JavaFX development mailing list 上的某个人可以提供当前实施的原因。
标签: java string javafx password-protection