我们已经知道使用
现在的问题是:当敏感数据最初以
char[]
替代String
来处理敏感数据的建议/实践。这样做有多个原因。其中之一是在敏感数据不再需要时立即清除它们:char[] passwd = passwordProvider.getKeyStorePassword();
KeyStore keystore = KeyStore.getInstance("JKS");
// TODO: Create the input stream;
keystore.load(inputstream, passwd);
System.arraycopy(new char[passwd.length], 0, passwd, 0, passwd.length);
// Please continue...
现在的问题是:当敏感数据最初以
String
值的形式传递给您时,使用char[]
是否有意义(特别是上面提到的点)?例如:char[] passwd = passwordProvider.getKeyStorePassword().toCharArray();
KeyStore keystore = KeyStore.getInstance("JKS");
// TODO: using the passwd, load the keystore;
System.arraycopy(new char[passwd.length], 0, passwd, 0, passwd.length);
// Please continue...
提前感谢您。
更新2:我会重新表述问题:在这个特定的上下文中(忘记未来的变化或其他任何事情),“清除char数组的内容”这行代码有任何好处吗?
更新1:这不是为什么密码首选char[]而不是String?的复制。 我知道故事是什么。 我问的是在这种特定的情况下,它是否仍然有意义?
Arrays.fill(passwd, '\0')
是清空数组更好的方法,因为它避免了创建新数组。 - Andy Turner