Java将敏感的'key'存储为String或char []?

Lan*_*fee 9 java security string

可能重复:
为什么char []比字符串更适合密码?

我在某处读到将敏感键存储为char []而不是String更好,因为后者可以在内存中找到.由于JPasswordField的getText()方法已被弃用,因此它也有一点意义.

这是真的?

Sus*_*Pal 9

一旦你完成了使用密码,char[]你总是可以用0或随机值覆盖它.但是,您不能对String对象执行此操作,因为它们是Java中的不可变对象,并且字符串将保持活动状态,直到垃圾收集器启动并清除它.

以下是http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html上的一个有趣的说明.

在此示例中,我们提示用户输入我们从中获取加密密钥的密码.

将密码收集并存储在java.lang.String类型的对象中似乎是合乎逻辑的.但是,这里有一点需要注意:String类型的对象是不可变的,即没有定义的方法允许您在使用后更改(覆盖)或清零String的内容.此功能使String对象不适合存储安全敏感信息,如用户密码.您应该始终在char数组中收集和存储安全敏感信息.

因此,javax.crypto.spec.PBEKeySpec类将密码作为char数组(并返回).