如何在Python中安全删除文件/目录?
有没有什么模块可以提供基本的“安全”删除功能,类似于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
。