在使用Java处理密码时,我的理解是它们应始终在char []中处理,以允许GC并删除挂起的引用。
我的问题是,
char[] password = String.valueOf(authentication.getCredentials()).toCharArray();
是否可以实现authentication.getCredentials()的值?
答案 0 :(得分:2)
这不是实施String的问题,使用字符串存储密码的任何安全问题都源于它们在内存中存在的时间。
使用char数组,您可以在阅读完内容后擦除内容。使用String(这是不可变的)你只能依赖垃圾收集器,这意味着如果有人访问你的服务器并转储内存,可能会有密码可见。
答案 1 :(得分:1)
String.valueOf()
没有实习生。在运行时实习生字符串的唯一方法是使用password.intern()
。 没有必要使用使用char[]
作为密码。char[]
可以让您在使用后直接清除阵列,缩小攻击者的时间范围以转储内存并检索明文密码。
字符串本身对GC来说并不特别。实习会影响它,但在常规使用中,你不会遇到任何不寻常的事情。