7

可能重复:
C# - 永久删除文件

你好,

我正在使用 C# .NET Framework 2.0。我有一个关于文件粉碎的问题。

我的目标操作系统是 Windows 7、Windows Vista 和 Windows XP。可能是 Windows Server 2003 或 2008,但我猜它们应该与前三个相同。

我的目标是安全地擦除文件。

我根本不相信使用 File.Delete 是安全的。我在某处读到,当您删除文件时,操作系统只是将原始硬盘数据标记为删除 - 数据根本没有被删除。这就是为什么存在如此多的工作方法来恢复所谓的“已删除”文件的原因。我也读过,这就是为什么覆盖文件更有用的原因,因为实际上必须更改磁盘上的数据。这是真的?这一般是需要的吗?

如果是这样,我相信我可以简单地写几次充满 1 和 0 的文件。

我读过: http://www.codeproject.com/KB/files/NShred.aspx http://blogs.computerworld.com/node/5756 http://blogs.computerworld.com/node/5687 安全删除C#.NET 中的文件

4

4 回答 4

5

恐怕你正面临一个复杂的问题。我建议不要尝试自己解决。

请注意,除了确保文件的物理覆盖(可能通过 LAN、闪存或其他方式)外,您还必须处理所有应用程序缓存、Windows 休眠文件、Windows 恢复文件、Windows 交换文件和所有副本或此文件的旧擦除版本(交换所有空白空间,或更糟糕的是,交换之前包含缓存的空间,并且此后可能已分配给其他文件) - 全部以正确的顺序排列。

我认为,如果您能够将文件存储在操作系统或其他应用程序不使用的专用逻辑(甚至物理)驱动器上,并且说服 Windows 不交换您用来保存文件的内存,而在 RAM 中(使用 VirtualLock())。不过,您应该擦除交换、缓存等。

On top of that, you should integrate a product like Eraser into your application (Eraser is Free software and its source code is released under GNU General Public License).

于 2010-12-30T07:19:40.747 回答
2

根据我的阅读,实际使数据不再可见的解决方案似乎是用 0 和 1 覆盖文件。

于 2010-12-30T06:18:11.760 回答
1

如果您要安全擦除的文件一开始就是您的,您可能需要首先考虑对其进行加密。那么即使删除后恢复,也不会泄露信息(假设你可以控制密钥)。

于 2010-12-30T06:31:03.077 回答
0

您可以多次打开文件并使用流密码覆盖它。覆盖它 7 次然后删除它似乎是常态:)

于 2010-12-30T06:17:21.557 回答