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 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
城管不管2 小时前
重生——第十一次面试之挖财一面2026.8.19已OC倔强的石头1062 小时前
向量数据库从相似度检索走向融合数据底座聪明蛋子哟2 小时前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案今天AI了吗3 小时前
Python 基础语法(一):常量、变量、输入输出与运算符卷无止境3 小时前
Windows 上丝滑开发 Python,并稳定构建 Docker 镜像TELL5214 小时前
selenium webdriver 第二次初始化的异常Csvn4 小时前
🐍 Day 4: Python 控制流 — 条件、循环与推导式的艺术lilian2334 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸皮卡丘不断更5 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口保卫大狮兄6 小时前
设备管理从台账到报废,完整生命周期一次讲清