如何在Python中安全删除文件/目录?

6 投票
2 回答
4228 浏览
提问于 2025-04-16 00:14

有没有什么模块可以提供基本的“安全”删除功能,类似于Linux中的“wipe”工具,比如说:

import securitystuff

securitystuff.wipe( filename )

我需要保护公司的源代码,确保它不容易被恢复。

附注:我知道“wipe”并不是完美的,比如在日志文件系统上。但我的安全需求并不是特别高。

2 个回答

-1
def secure_delete(path, random_fill=True, null_fill=True, passes=3):
    """
    securely delete a file by passing it through both random and null filling
    """
    files = os.listdir(path)
    for i, f in enumerate(files):
        files[i] = "{}/{}".format(path, f)
    for item in files:
        with open(item, "wr") as data:
            length = data.tell()
            if random_fill:
                for _ in xrange(passes):
                    data.seek(0)
                    data.write(os.urandom(length))
            if null_fill:
                for _ in xrange(passes):
                    data.seek(0)
                    data.write("\x00" * length)
        os.remove(item)

请注意,这样做会把文件彻底清除到几乎无法用普通方法恢复的程度,但这并不能阻止那些真的想要你数据的人去恢复这个文件。你可以参考上面的回答,尝试让这个过程更安全一些。

5

标准库里没有这样的功能,而一个简单的实现方法是用随机字节覆盖文件的每一个字节,这其实并不难,比如:

 f = open(path, "wb")
 f.write("*"*os.path.getsize(path))
 f.close()
 os.unlink(path)

不过正如在这个讨论串中提到的,http://mail.python.org/pipermail/python-list/2004-September/899488.html,这样做并不能保证文件被彻底清除,原因有很多,比如磁盘缓存、磁盘扇区的重新映射等等。

所以与其自己去实现,最简单的方法是直接在Python中调用 linux wipe

另外一个选择是使用 srm

撰写回答