无论如何在Java中删除数据(例如,变量值,对象)并确保它无法从内存中恢复?分配null给Java中的变量是否会从内存中删除值?有任何想法吗?适用于其他语言的答案也是可以接受的.
Aar*_*paa 19
由于奇迹虚拟内存,几乎不可能以完全无法挽回的方式从内存中删除内容.您最好的选择是将值字段清零; 然而:
将敏感数据存储在数组中,然后尽快将其"清零".
RAM中的任何数据都可以通过虚拟内存系统复制到磁盘.RAM(或核心转储)中的数据也可以通过调试工具进行检查.为了尽量减少发生这种情况的可能性,您应该努力做到以下几点
String来保存秘密Java中的加密API使用这种方法,您创建的任何API也应该支持它.例如,KeyStore.load允许呼叫者清除密码char[],并在呼叫完成时,与基于密码的加密的KeySpec一样.
理想情况下,您可以使用finally块将数组归零,如下所示:
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream is = …
char[] pw = System.console().readPassword();
try {
ks.load(is, pw);
}
finally {
Arrays.fill(pw, '\0');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |