首页 > 解决方案 > 删除文件以使其不可恢复的正确方法是什么?

问题描述

目前我正在使用 file.delete() ,但它显示出安全风险,因为像这样删除的文件可以通过不同的方式恢复。所以请给我一个删除文件的正确方法。此处描述的安全风险由名为 Quixxi 的测试工具提供,它会检查应用程序中的任何漏洞。

标签: javaandroidfile

解决方案


不幸的是,在 JRE 中不可能。JVM 不是为此而设计的,您需要依赖于操作系统的实用程序。

答案user1676075包含错误。让我们一步一步来。

正如已经指出的,Java 的File.delete方法只是取消链接文件,将其内容保留在磁盘上。它实际上调用底层操作系统 API 来执行此取消链接操作。

当您要覆盖 Java 中的内容时会出现此问题。

Java 可以打开文件进行覆盖,但会利用 OS 实用程序来执行此操作。操作系统可能会:

  1. 取消链接磁盘上分配的空间
  2. 将文件链接到磁盘的新空闲区域

结果是您现在正在写大量的零……在其他地方!!!即使您设法在原始文件使用的相同扇区上写入零,Gutmann 方法的存在也是有原因的。Gutmann 实用程序需要 root/管理员(超级用户)权限和直接 DMA 访问权限,以精确控制必须发生写入的位置。

有了 SSD,情况就会发生变化。实际上,它可能会变得更容易!在这一点上,我应该为具有 CLEAR 指令的 SSD 提供源代码,以用零替换扇区,并且保护隐私的磁盘控制器会这样做。但也许假装你什么也没读。

现在这将是一个足够的答案,因为我们已经证明没有开箱即用的直接方法可以安全地清除 Java 中的文件

Java 允许和调用的Java Native Interfaces(另请参阅Java Native Access)是从 Java 调用本机代码。那么,你准备好 C++ 中的 Gutmann 工具了吗?你在运行root吗?您可以编写代码以从 Java 中调用 Gutmann 式擦除,但这是另一回事。

从未尝试过,但肯定可行


推荐阅读