【问题标题】:Java: Console class [duplicate]Java:控制台类[重复]
【发布时间】:2012-09-12 05:32:18
【问题描述】:

可能重复:
Why is char[] preferred over string for passwords?

阅读java文档,我发现了这个关于Consoleclass的声明

首先,它禁止回显,因此密码在用户屏幕上不可见。其次,readPassword 返回一个字符数组,而不是一个字符串,所以密码可以被覆盖,一旦不再需要就从内存中删除。

为什么可以覆盖字符数组而不能覆盖字符串? 或者也许可以用更简单的方式覆盖字符数组?

【问题讨论】:

标签: java input console passwords overwrite


【解决方案1】:

JVM 可以将String 保存在称为String pool 的地方,以更有效地管理Strings 的内存使用情况。然而,这样做的一个副作用是,即使您用新的String 覆盖引用,它也可能保留在内存中。
然而,字符数组可以直接被覆盖,因此在这方面更安全。

【讨论】:

    【解决方案2】:

    来自 Sun Certified Java Programmer for Java 6 学习指南:

    readPassword 方法不返回字符串:它返回一个字符数组。原因如下:获得密码后,您可以验证它,然后将其从内存中彻底删除。如果返回了一个字符串,它可能存在于内存中某处的池中,也许某些邪恶的黑客可以找到它。

    【讨论】:

    • @downvoter:至少解释一下自己。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多