首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的安全文件删除

C中的安全文件删除
EN

Stack Overflow用户
提问于 2011-10-13 16:46:03
回答 5查看 4K关注 0票数 5

C中的安全文件删除

我需要安全地删除C中的一个文件,下面是我所做的工作:

  1. 使用fopen获取文件的句柄
  2. 使用lseek/ftell计算大小
  3. 根据当前时间/或文件大小随机获取种子
  4. 从循环中向文件写入(大小)字节,每次迭代编写256字节
  5. fflush/fclose文件句柄
  6. 重新打开文件并重新执行步骤3-6,每次10~15次。
  7. 重命名文件,然后删除它

是这样的吗?因为我在橡皮擦中读到了名字"Gutmann 25 passes“,所以我猜25是文件被覆盖的次数,而'Gutmann‘是随机化算法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-13 17:07:13

如果没有操作系统的合作,您就无法安全地完成这一任务--而且通常情况下也是如此。

当您打开一个文件并写入它时,并不能保证操作系统会将新文件放在与旧文件相同的旋转锈蚀点上。即使是这样,你也不知道新的写是否会像以前一样使用相同的集群链。

即使如此,你也不确定驱动器没有映射出磁盘块,因为有一些错误--把你的世界统治计划留在一个标记糟糕但仍然可读的块上。

ps - 25x覆盖不再是必要的,它是需要在旧的低密度MFM驱动器与不良的头部跟踪。在现代GMR驱动器上,覆盖一次就足够了。

票数 8
EN

Stack Overflow用户

发布于 2011-10-13 16:50:54

是的,实际上它是在文件上覆盖不同的模式。

为此,它在该地区编写了一系列35种模式,以加以删除。 模式的选择假设用户不知道驱动器使用的编码机制,因此包括专门为三种不同类型的驱动器设计的模式。知道驱动器使用哪种编码类型的用户只能选择那些打算用于其驱动器的模式。具有不同编码机制的驱动器需要不同的模式。

更多信息是这里

票数 1
EN

Stack Overflow用户

发布于 2011-10-13 17:25:09

@Martin是正确的,除非你知道硬件到底在做什么,否则就会有“安全删除”这样的东西。(即使如此,我也不会押注一个资金充足的攻击者在访问物理媒体后能恢复什么。)

但是,假设操作系统和磁盘将重复使用相同的块,您的方案就无法工作,原因是:fflush通常不会向磁盘写入任何内容。

在大多数多任务操作系统(包括Windows、Linux和OS )上,fflush只是将用户空间缓冲区中的数据强制进入内核。然后,内核将进行自己的缓冲,只在它想要的时候才写到磁盘。

例如,在Linux上,您需要调用fsync(fileno(handle))。(或者一开始就使用文件描述符。)OS是相似的。Windows有FlushFileBuffers

底线:您描述的循环很可能只是覆盖内核缓冲区10-15次,而不是磁盘上的文件。在C或C++中没有将数据强制到磁盘的可移植方式。为此,您需要使用依赖于平台的接口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7757495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档