我们已经知道使用这个建议/做法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 []首选字符串的密码? 我知道故事是什么.我在这个特定的背景下问,它还有意义吗?
在我看来,它返回一个String.
但是,如果您必须使用该 API,char[]立即转换为意味着您不会阻止String实例被 GC 处理,因为您持有对它的引用的时间不会超过绝对必要的时间。
所以,char[]在这里使用是有意义的,因为你“不会让它变得更糟”。
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |