我知道如何在C#中擦除文件,包括它的扇区等。
但是如何覆盖目录呢?
示例:@"C:\mydirectory\"
必须永远不可恢复(所有文件内部都已擦除),因此无法恢复目录结构或其名称。
-------------------下面的更新(评论格式是如此麻烦,所以我在这里发布)---
对于文件删除,我查找分区的群集和区域大小,并使用5种不同的算法将其覆盖至少40次,其中最后一种算法始终是随机算法。数据实际上每次都写入磁盘(而不仅仅是内存或其他东西)。唯一的风险是,当我擦除某些东西时,理论上可以更改该文件磁盘上的物理地址。我知道的唯一解决方案是在擦除文件后擦除可用磁盘空间,并希望当前没有其他文件部分保留擦除文件的旧物理位置。或者Windows不会做这样的事情吗?
http://www.sans.org/reading_room/whitepapers/incident/secure-file-deletion-fact-fiction_631州:
“重要的是要注意覆盖数据的共识只能减少数据 数据恢复的可能性。数据被覆盖的次数越多,越多 它变得昂贵且耗时,以恢复数据。事实上彼得古特曼 声明“......通过简单的覆盖实际上不可能对存储位置进行消毒 它们,无论有多少次覆盖传递或写入什么数据模式。“3使用磁力显微镜可以恢复覆盖的数据, 处理硬盘盘片上的成像磁化模式。实际上 如何实现这一点的细节超出了本文的范围。“
我个人认为,当我使用不同的(可能是未知的)算法覆盖100次以上的数据时(如果没有像交换文件那样留在其他地方的数据副本),那将需要任何非常昂贵的团队专业人士用了很多年才得到这些数据。如果他们确实在这些年后获得了数据,那么他们应该得到它,我猜......这一定是一个终生的项目。
所以:
然后结论应该是:(几乎)不可能在C#中安全擦除?
答案 0 :(得分:1)
如果文件夹中的所有文件/文件夹都已擦除(如您所述),则剩下的就是目录本身。使用隐秘的随机数生成器重命名目录并将其删除。它会像擦拭一样好。
如果这还不够,请抓取Eraser命令行可执行文件的副本并执行命令:
Process.Start("eraserl.exe", @"-folder "C:\MyDirectory\" -subfolders -method DoD_E -silent");
答案 1 :(得分:1)
没有通用的方法......考虑一下SSD:你甚至无法确保你的写操作会写入相同的物理地址,因为磨损均衡方法
答案 2 :(得分:0)
如您所知,安全删除并不简单。所以可能值得考虑另一种策略。
您是否考虑使用TrueCrypt之类的内容来创建加密卷?您可以将文件存储在那里,然后使用标准的删除例程。然后,攻击者需要解密加密卷并恢复已删除的文件。