66 lines
2.4 KiB
Python
66 lines
2.4 KiB
Python
import os
|
|
import shutil
|
|
import random
|
|
|
|
class SecureDeleter:
|
|
def __init__(self, path):
|
|
self.path = path
|
|
|
|
def overwrite_file(self, file_path, passes=7):
|
|
"""Overwrites the file with multiple patterns and random data."""
|
|
patterns = [b'\x00', b'\xFF', random.randbytes(1)]
|
|
print(patterns)
|
|
length = os.path.getsize(file_path)
|
|
for _ in range(passes):
|
|
with open(file_path, "r+b") as file:
|
|
for pattern in patterns:
|
|
file.seek(0)
|
|
for _ in range(length):
|
|
file.write(pattern)
|
|
# Final pass with random data for each byte
|
|
file.seek(0)
|
|
file.write(random.randbytes(length))
|
|
|
|
def delete_file(self, file_path):
|
|
"""Securely deletes a file."""
|
|
if os.path.isfile(file_path):
|
|
self.overwrite_file(file_path)
|
|
os.remove(file_path)
|
|
|
|
def delete_folder(self, folder_path):
|
|
"""Securely deletes a folder and its contents."""
|
|
if os.path.isdir(folder_path):
|
|
for root, dirs, files in os.walk(folder_path, topdown=False):
|
|
for name in files:
|
|
file_path = os.path.join(root, name)
|
|
self.delete_file(file_path)
|
|
for name in dirs:
|
|
os.rmdir(os.path.join(root, name))
|
|
shutil.rmtree(folder_path)\
|
|
|
|
def wipe_free_space(self, drive, size=1024*1024*10): # 10MB default file size
|
|
"""Writes temporary files with random data to overwrite free disk space."""
|
|
temp_files = []
|
|
try:
|
|
while True:
|
|
temp_file = os.path.join(drive, f"temp_{random.randint(0, 999999)}.dat")
|
|
with open(temp_file, "wb") as file:
|
|
file.write(random.randbytes(size))
|
|
temp_files.append(temp_file)
|
|
except OSError: # Typically disk full
|
|
for temp_file in temp_files:
|
|
os.remove(temp_file)
|
|
|
|
def execute(self):
|
|
"""Determines whether the path is a file or folder and deletes it securely."""
|
|
if os.path.isfile(self.path):
|
|
self.delete_file(self.path)
|
|
elif os.path.isdir(self.path):
|
|
self.delete_folder(self.path)
|
|
else:
|
|
print("Path does not exist.")
|
|
|
|
# Usage example:
|
|
#deleter = SecureDeleter("/path/to/your/file_or_folder")
|
|
#deleter.execute()
|