防止操作系统在Java中将对象交换到虚拟内存/磁盘?

时间:2015-06-18 22:47:56

标签: java virtual-memory

所以我有一个让用户输入密码的程序。在覆盖它之前,我只在char[]中持有密码几秒钟,但我想知道是否有一种方法可以防止操作系统将此位交换到磁盘/虚拟内存/比RAM更永久的存储?关于这个话题的研究似乎说不,没有办法,但没有办法给我一个直接的答案。我也不确定我是否可以通过某种方式使用mlock()或保持对值的引用直到我不再需要它来实现这一点。

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要做的是:使用char[]存储密码。当你完成密码时,只需用0写入数组,这样如果攻击者试图扫描所有内存以找到密码,并且Java GC在此之前还没有摆脱变量,那么攻击者就不会能够检索密码,因为你已经过度编写了数组本身。

干杯。

编辑:当内核开始使用HDD卸载RAM上的压力时,HDD上的空间就像RAM一样,这意味着它不会永久存储提供给它的数据。