Экстренное шифрование данных

Экстренное шифрование данных

the Matrix • Cyber News
xmlns="http://www.w3.org/1999/xhtml">

Прошу не судить слишком строго, всё-таки первая статья на е как-никак :)

Вступление

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

Представим такую ситуацию: на вашем компьютере хранятся очень важные или компрометирующие вас данные, а в вашу дверь кто-то ломится. Ваша задача заключается в том, что бы быстро и незаметно зашифровать всю важную информацию на своём компьютере.

Для этого понадобится всего-лишь отключить заранее подготовленную флешку (карту памяти) из своего компьютера, после чего программа работавшая до этого в фоновом режиме автоматически начнёт процесс шифрования выделенных данных. Вам остаётся лишь надёжнее спрятать флешку с ключом шифрования)

Реализация

Теперь попытаемся перенести описанную выше программу в реальный мир. В качестве языка программирования я выбрал Python. Во-первых, он удобен для этих целей, а во-вторых, я знаю его лучше всех остальных. Для начала создадим программу для шифрования. Установим библиотеку cryptography:

pip install cryptography

Далее импортируем в нашу программу все необходимые библиотеки:

import osimport sysfrom cryptography.fernet import Fernet

После этого создадим переменные с буквой нашей флешки и путём к папке файлы в которой необходимо зашифровать. В моём случае буква диска — E. Так же необходимо написать функцию которая будет проверять, подключена ли флешка к компьютеру или нет. Я долго думал как реализовать эту функцию лучше всего. По итогу пришёл к такому варианту:

drive_letter = "E"encrypted_path = "C:/Data"def check_drive(drive_letter): if os.system("cd " + drive_letter + ":") == 0:  return True else:  return False

Далее создадим функции создания и чтения ключа шифрования:

def write_key(): key = Fernet.generate_key() with open(drive_letter + ":/key.txt", "wb") as key_file:  key_file.write(key)def load_key(): with open(drive_letter + ":/key.txt", "r") as file:  key = file.read() return key

Как вы видите ключ создаётся и читается именно на диске E:/, то есть на флешке. Это означает что вынув её из компьютера, доступ к зашифрованным файлам останется только у вас.

Так же создадим две функции для шифрования и расшифровки наших файлов. В качестве аргументов они будут принимать имя файла и ключ шифрования.

def encrypt(filename, key): # Шифрование файла fernet = Fernet(key) with open(filename, "rb") as file:  file_data = file.read()  encrypted_data = fernet.encrypt(file_data)  with open(filename, "wb") as file:   file.write(encrypted_data)def decrypt(filename, key): # Расшифровка файла fernet = Fernet(key) with open(filename, "rb") as file:  file_data = file.read() decrypted_data = fernet.decrypt(file_data) with open(filename, "wb") as file:  file.write(decrypted_data)

Теперь самое интересное. Напишем функцию, с помощью которой наша программа будет перемещаться по директориям и шифровать файлы. Для начала определим список файлов и папок в текущей директории с помощью функции os.listdir(). Дальше пройдёмся по ранее полученному списку и определим тип каждого элемента: файл или папка. Если это файл — шифруем его, если папка — запускаем нашу функцию повторно по новому пути.

def walk(directory): names = os.listdir(directory) for name in names:  path = os.path.join(directory, name)  ext = os.path.splitext(path)  if os.path.isfile(path):   encrypt(path, key)  else:   walk(path)

Ну и последний штрих. Если файл key.txt не найден на флешке, создаём его. Далее читаем из него ключ и сохраняем его в переменной key. После создаём бесконечный цикл проверки подключения флешки и если наша программа обнаружит что флешка отключена будет инициализирована функция walk(), в качестве аргумента передаём ей директорию, файлы и папки в которой нужно зашифровать:

if os.path.isfile(drive_letter + ":/key.txt") == False: write_key() key = load_key()else: key = load_key()while True: if not check_drive(drive_letter):  walk(encrypted_path)  print("Encrypted!")  break

Теперь, по похожей логике создадим программу для расшифровки наших данных. Она будет читать ключ из файла key.txt, которых хранится на нашей флешке:

import osimport sysfrom cryptography.fernet import Fernetdrive_letter = "E"decrypted_path = "C:/Data"def load_key(): with open(drive_letter + ":/key.txt", "r") as file:  key = file.read() return keydef decrypt(filename, key): fernet = Fernet(key) with open(filename, "rb") as file:  file_data = file.read() decrypted_data = fernet.decrypt(file_data) with open(filename, "wb") as file:  file.write(decrypted_data)def walk(directory): names = os.listdir(directory) for name in names:  path = os.path.join(directory, name)  ext = os.path.splitext(path)  if os.path.isfile(path):   decrypt(path, key)  else:   walk(path)key = load_key()            walk(decrypted_path)
Итог

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

Так же, программу можно добавить в автозагрузку, что бы не запускать её каждый раз при запуске компьютера вручную.

Теперь, всё что вам остаётся сделать, так это вставить свою флешку в компьютер, включить программу для шифрования наслаждаться пресловутой безопасностью :-)


Источник

Наши проекты:

- Кибер новости: the Matrix • Cyber News
- Хакинг: /me Hacker
👁 Пробить человека? Легко через нашего бота: Мистер Пробиватор

Report Page