为什么推荐用char[]而不是String来存储密码
Why is char[] preferred over String for passwords in Java?
为什么Java Swing用char[]
来存储密码,而不是String
?
因为String
是不可变的(immutable)。
这意味着在String
对象被垃圾回收前,密码会一直存在于内存中。
(虽然可以通过反射来修改String
对象的field的访问权限,进而修改String
对象。)
使用char[]
来存储密码的好处是使用后可以马上抹掉char[]
的内容。
安全总是相对的。一种可能性(取决于JVM实现)是在抹掉char[]
之前发生了GC,移动了char[]
对象
(比如从Eden移动到Survivor),使得老的char[]
还驻留在内存里。
还有一点要注意的是不要在log里(无意地)打印敏感信息,比如密码等。
...