java - 删除文件以使其不可恢复的正确方法是什么?
问题描述
目前我正在使用 file.delete()
,但它显示出安全风险,因为像这样删除的文件可以通过不同的方式恢复。所以请给我一个删除文件的正确方法。此处描述的安全风险由名为 Quixxi 的测试工具提供,它会检查应用程序中的任何漏洞。
解决方案
不幸的是,在 JRE 中不可能。JVM 不是为此而设计的,您需要依赖于操作系统的实用程序。
答案user1676075
包含错误。让我们一步一步来。
正如已经指出的,Java 的File.delete
方法只是取消链接文件,将其内容保留在磁盘上。它实际上调用底层操作系统 API 来执行此取消链接操作。
当您要覆盖 Java 中的内容时会出现此问题。
Java 可以打开文件进行覆盖,但会利用 OS 实用程序来执行此操作。操作系统可能会:
- 取消链接磁盘上分配的空间
- 将文件链接到磁盘的新空闲区域
结果是您现在正在写大量的零……在其他地方!!!即使您设法在原始文件使用的相同扇区上写入零,Gutmann 方法的存在也是有原因的。Gutmann 实用程序需要 root/管理员(超级用户)权限和直接 DMA 访问权限,以精确控制必须发生写入的位置。
有了 SSD,情况就会发生变化。实际上,它可能会变得更容易!在这一点上,我应该为具有 CLEAR 指令的 SSD 提供源代码,以用零替换扇区,并且保护隐私的磁盘控制器会这样做。但也许假装你什么也没读。
现在这将是一个足够的答案,因为我们已经证明没有开箱即用的直接方法可以安全地清除 Java 中的文件。
Java 允许和调用的Java Native Interfaces
(另请参阅Java Native Access)是从 Java 调用本机代码。那么,你准备好 C++ 中的 Gutmann 工具了吗?你在运行root吗?您可以编写代码以从 Java 中调用 Gutmann 式擦除,但这是另一回事。
从未尝试过,但肯定可行
推荐阅读
- jquery - 在 Jquery 中选择多个复选框
- html - 如何使幻灯片图像在不同的视口尺寸下按比例缩放?
- ios - 将单元格添加到可见的空 UITableView 以白色背景显示
- java - 如何在java中使用正则表达式在特定位置的文本中查找数字
- python - 为什么 matplotlib.pyplot.imsave() 和 matplotlib.pyplot.imshow() 图像质量不同?如何保证同样的质量?
- user-interface - 如何使用构建器功能?- 颤动
- c# - 在 WinForms 应用程序中运行批处理文件问题
- node.js - 节点使用 child_process 启动 VLC Player
- sql - 如何在 CTE 和两个表之间使用 Join 查询?
- docker - 允许从 localhost 到 docker 容器的流量