Java敏感数据:char [] vs String?有什么意义?

Rad*_*Rad 6 java

我们已经知道使用这个建议/做法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...
Run Code Online (Sandbox Code Playgroud)

现在的问题是:char[]当敏感数据最初作为String价值出现时,它(即使用)是否有意义(特别是上面提到的那一点)?例如:

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...
Run Code Online (Sandbox Code Playgroud)

提前致谢.

更新2:我将重新解释这个问题:在这个特定的环境中(忘记将来或其他任何事情的变化),清除"char数组的内容"这一行是否有用?

UPDATE1:它不是重复的为什么char []首选字符串的密码? 我知道故事是什么.我在这个特定的背景下问,它还有意义吗?

And*_*ner 5

在我看来,它返回一个String.

但是,如果您必须使用该 API,char[]立即转换为意味着您不会阻止String实例被 GC 处理,因为您持有对它的引用的时间不会超过绝对必要的时间。

所以,char[]在这里使用是有意义的,因为你“不会让它变得更糟”。