Как безопасно стереть файл / каталог в Python? - PullRequest
4 голосов
/ 21 июня 2010

Есть ли какой-нибудь модуль, который обеспечивает как-то базовое "безопасное" удаление, sth.как и утилита Linux "wipe", например

import securitystuff

securitystuff.wipe( filename )

Мне нужно защитить исходный код компании, который больше не может быть легко извлечен.

PS Да, я знаю, что "wipe" не идеален,например, для журналирования файловой системы.Но спрос на безопасность не слишком высок.

Ответы [ 2 ]

4 голосов
/ 21 июня 2010

В стандартной библиотеке нет такой функции, и наивная реализация, которая перезаписывает каждый байт файла случайным байтом, не слишком сложна, например,

 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, это не гарантирует стирание по многим причинам, например, кэш диска, переназначение секторов диска и т. д.

Таким образом, вместо того, чтобы реализовывать собственную очистку, проще всего было бы вызвать linux wipe из python.

Альтернативным вариантом является использование srm

0 голосов
/ 05 июля 2018
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)

Обратите внимание, что это приведет к стиранию файла до такой степени, что его будет практически невозможно восстановить с помощью стандартной системы, но это не остановит того, кто действительно хочет, чтобы ваши данные восстановили файл.Возможно, вы сможете реализовать его с помощью приведенного выше ответа, чтобы сделать его более безопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...