DoD 5220.22-M 是美国国防部旧版手册提出的3次覆写数据擦除建议,但已被 NIST SP 800-88 取代;它仅对传统 HDD 上未被覆盖的扇区有效,对 SSD、加密卷等无效,实际安全性有限。什么是 DoD 5220.22-M 覆写,它真能防恢复吗?DoD 5220.22-M(常被简称为 "DoD 5220")并不是一个强制标准,而是美国国防部旧版手册中提出的一种数据擦除建议:用随机值或固定模式(如 0x00、0xFF、随机字节)覆写 3 次,中间穿插验证。现实中它已被 NIST SP 800-88 Rev.1 取代,且现代 SSD、SMR 硬盘、日志文件系统(如 ext4 的 journal、NTFS 的 USN journal)会让这种覆写完全失效------你根本无法控制物理块是否被真正覆盖。所以,在普通磁盘上对文件做 DoD 5220 风格覆写有意义;在 SSD、加密卷、快照/备份活跃的系统上,它只是心理安慰。覆写只对传统 HDD 上的 unlink() 后未被新数据覆盖的扇区有效SSD 的 FTL 层会重映射逻辑地址,write() 到同一路径 ≠ 写入同一物理页Windows 的 MoveFileEx(..., MOVEFILE_DELAY_UNTIL_REBOOT) 或 macOS 的 setfile -a V 隐藏+删除,不解决底层残留C++ 中如何安全覆写并删除单个文件(HDD 场景)核心是:先打开文件(open() 或 fopen()),用 lseek()/fseek() 定位到开头,循环覆写全尺寸,再 fsync() 强刷缓存,最后 unlink()。不能依赖 std::ofstream 默认行为------它可能缓冲、截断、甚至因异常提前退出。关键实操点:立即学习"C++免费学习笔记(深入)";必须用 O_WRONLY | O_SYNC(Linux/macOS)或 _O_WRONLY | _O_NOINHERIT + _commit()(Windows MSVC)绕过内核/运行时缓冲覆写次数按需设为 1(随机)、3(DoD 风格)、7(Gutmann,已过时但有人坚持)------更多次不提升安全性,只拖慢速度每次覆写前调用 lseek(fd, 0, SEEK_SET),避免因文件指针偏移导致尾部未覆写务必检查 write() 返回值,部分设备(如只读挂载)会返回 -1 或短写示例片段(Linux): 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
●VON18 小时前
鸿蒙Flutter实战:分类管理页BottomSheet CRUDCosolar18 小时前
Chroma向量库面试学习指南风吹夏回19 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底小熊Coding20 小时前
Python爬取当当网二手图书项目实战!企服AI产品测评局20 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?秋920 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案小江的记录本20 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)cfm_291420 小时前
Redis数据安全性解析DIY源码阁20 小时前
JavaSwing学生成绩管理系统 - MySQL版田里的水稻21 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容