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 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
东南门吹雪30 分钟前
Spring事务传播机制深度解析_Evan_Yao31 分钟前
零基础学编程,第一门语言选Python还是C?不甘先生31 分钟前
PostgreSQL 中的 JSONB 详解:从入门到实战Irene199136 分钟前
PL/SQL:异常处理补充阿维的博客日记36 分钟前
Bean 会被 JVM 回收吗?dishugj37 分钟前
SAP HANA数据库文件目录说明l1t40 分钟前
DeepSeek总结的使用 eBPF 和硬件断点跟踪 PostgreSQL步步为营DotNet40 分钟前
深入探究.NET 11 中.NET Aspire 在云原生应用持续集成与交付安全加固薪火铺子1 小时前
MySQL InnoDB 索引底层:B+树深度解析Soari1 小时前
深度办公革命:拆解 Claude for Microsoft 365,打造金融级智能办公生态