You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写适配现代Python的安全文件删除函数的相关技术疑问

关于Python安全文件删除函数的三个技术疑问

我正在开发轻量化、可移植的自定义PIP包,需要编写适配现代Python版本的安全文件删除函数。之前在Stack Overflow上查到两种实现方案:一是安装srm命令并通过subprocess调用,二是编写自定义函数。考虑到轻量化和可移植性,我排除了第一种方案,整合出以下代码(已修正原代码中变量名不一致的问题):

import os

def secure_delete(path_to_file, passes=1):
    length = os.path.getsize(path_to_file)
    with open(path_to_file, "br+", buffering=-1) as file_to_overwrite:
        for _ in range(passes):
            file_to_overwrite.seek(0)
            file_to_overwrite.write(os.urandom(length))
    os.remove(path_to_file)

针对这段代码,我有三个技术疑问,下面逐一解答:

1. os.path是否已被pathlib广泛取代?

没有完全被取代,但pathlib是现代Python官方推荐的路径处理方案。pathlib采用面向对象的API,代码更简洁易读,比如获取文件大小可以写成Path(path_to_file).stat().st_size,比os.path.getsize的调用方式更连贯。不过os.path的函数依然兼容所有Python版本,大量老项目仍在使用。如果是新开发的包,优先用pathlib更符合现代Python的编码风格。

2. os.urandom(length)是否为当前高效且合规的实现方式?

合规性完全没问题,但效率要分场景看。os.urandom从系统级加密安全随机数生成器获取数据(比如Linux的/dev/urandom、Windows的CryptGenRandom),符合安全要求,不会泄露敏感信息。但如果处理大文件,一次性生成length长度的随机数会占用较多内存,建议改成分块写入——比如每次生成4KB或64KB的随机数据,循环覆盖整个文件,这样能大幅降低内存占用。

3. passes参数实现的多次覆盖操作,从安全角度看是否有实际价值?

分存储设备类型来看:

  • 对于机械硬盘(HDD),多次覆盖有实际价值。机械硬盘的磁道会残留数据痕迹,多次写入不同的随机数据能大幅降低数据被专业工具恢复的概率。
  • 对于固态硬盘(SSD),多次覆盖基本没用。SSD有磨损均衡、TRIM机制,覆盖操作不会真正写入到原数据的存储位置,反而反复写入会损耗SSD寿命。

如果要适配不同设备,可以让用户自行选择是否开启多次覆盖,或者尝试跨平台判断存储类型(不过这个实现起来比较复杂)。

内容的提问来源于stack exchange,提问作者Tom Hosker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 17:15:18