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

时间:2010-06-21 09:35:04

标签: python security file

是否有任何模块以某种方式提供基本的“安全”删除,某事。比如Linux实用程序“擦除”,例如

import securitystuff

securitystuff.wipe( filename )

我需要保护不再容易检索的公司源代码。

P.S。是的我知道“擦拭”并不完美,例如在日志文件系统上。但安全需求并不太高。

2 个答案:

答案 0 :(得分:4)

标准库中没有这样的函数,并且用一个随机字节覆盖文件的每个字节的简单实现并不难做到。

 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

答案 1 :(得分:0)

    private void GetColumns(string Table)
    {
        listBox1.Items.Clear();
        string Query = "SELECT COLUMN_NAME FROM <YourDataBaseName>.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @Table";
        SqlDataReader reader = null;
        try
        {
            //Use your own connection string
            using (SqlConnection sqlConn = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=<YourDataBaseName>;Integrated Security=True"))
            using (SqlCommand command = new SqlCommand(Query, sqlConn))
            {
                sqlConn.Open();
                command.Parameters.AddWithValue("@Table", Table);
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    listBox1.Items.Add(reader["COLUMN_NAME"]);
                }
            }
        }

        catch (Exception ex)
        {
            MessageBox.Show("" + ex.Message);
        }

        finally
        {
            if (reader != null)
            {
                if (!reader.IsClosed)
                {
                    reader.Close();
                }
            }
        }
    }

请注意,这会将文件擦除到几乎无法使用标准系统恢复的程度,但这不会阻止真正想要您的数据的人恢复文件。您也许可以使用上面的答案来实现它,以使其更加安全。