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 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
傻啦嘿哟6 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平2501_933670796 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备2601_962077606 小时前
python Dejavu库快速识别音频指纹实例探究科技苑6 小时前
如何用Python编程实现一个简单的Web爬虫?程序员清风7 小时前
Java 后端高并发设计:线程池、限流、熔断与降级天衍四九-7 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?dayDayupbetter7 小时前
Visual C++ 2010安装与使用高手秘籍隐擎fox7 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战尚久龙7 小时前
mysql-5.7.26-winx64的安装步骤医疗信息化王工7 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战