Java将敏感的'key'存储为String或char []?
可能重复:
为什么char []优先于字符串的密码?
我在某处读取将敏感键存储为char []而不是String的方式会更好,因为后者可以在内存中找到。 由于JPasswordField的getText()方法被弃用,它也有点意义。
这是真的?
一旦你在char[]
使用密码,你总是可以用0或随机值覆盖它。 然而,你不能用String
对象来做到这一点,因为它们是Java中的不可变对象,并且这些字符串将保持活动状态,直到垃圾收集器启动并清除它为止。
http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/CryptoSpec.html上的有趣说明
在这个例子中,我们提示用户输入一个密码,我们从中获得一个加密密钥。
将密码收集并存储在java.lang.String类型的对象中似乎是合乎逻辑的。 但是,这里需要注意的是:String类型的对象是不可变的,也就是说,没有定义的方法可以让您在使用后更改(覆盖)或清零字符串的内容。 此功能使String对象不适合存储安全敏感信息(如用户密码)。 您应该始终将安全敏感信息收集并存储在char数组中。
出于这个原因,javax.crypto.spec.PBEKeySpec类将一个密码作为一个char数组。
链接地址: http://www.djcxy.com/p/17883.html上一篇: Java storing sensitive 'key' as String or char[]?
下一篇: Why we read password from console in char array instead of String