Найти в Дзене
[PYTHON:TODAY]

Зашифровываем файлы c помощью Python

Оглавление
pythontoday.ru
pythontoday.ru

Интро

Всем привет. Сегодня мы с вами напишем программу для шифрования файлов и директорий на Python.

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

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

Пишем скрипт шифрования

Устанавливаем библиотеку:

pip install pyAesCrypt

Создаём файл для шифрования, я назову его encryption.py и импортируем нужные нам модули:

import pyAesCrypt
import os
import sys

Нам понадобятся две функции, одна будет шифровать файлы, а вторая ходить по директориям по указанному нами пути и искать их.

Напишем функцию шифрования. В качестве параметров она будет принимать файл и пароль:

# функция шифрования файла
def encryption(file, password):

# задаём размер буфера
buffer_size = 512 * 1024

# вызываем метод шифрования
pyAesCrypt.encryptFile(
str(file),
str(file) + ".crp",
password,
buffer_size
)

# чтобы видеть результат выводим на печать имя зашифрованного файла
print("[Файл '" + str(os.path.splitext(file)[0]) + "' зашифрован]")

# удаляем исходный файл
os.remove(file)

Теперь напишем функцию обхода по директориям. То есть если по указанному нами пути будут встречаться другие директории, наш шифровальщик будет сканировать их на наличие файлов и зашифровывать всё что видит. Её параметрами будут путь до директории и пароль для шифрования:

# функция сканирования директорий
def walking_by_dirs(dir, password):

# перебираем все поддиректории в указанной директории
for name in os.listdir(dir):
path = os.path.join(dir, name)

# если находим файл, то шифруем его
if os.path.isfile(path):
try:
encryption(path, password)
except Exception as ex:
print(ex)
# если находим директорию, то повторяем цикл в поисках файлов
else:
walking_by_dirs(path, password)

С помощью функции input() запросим наш пароль и вызовем функцию walking_by_dirs():

password = input("Введите пароль для шифрования: ")
walking_by_dirs("path", password)

Пишем скрипт дешифровки

Перед испытаниями, давайте сразу создадим файл для дешифровки, decryption.py. Он на 99% будет аналогичен.

Копируем код. Меняем название функции, метод шифрования, на метод расшифровки. Не забываем в функции walking_by_dirs() так же заменить вызываемую функцию:

import pyAesCrypt
import os
import sys

# функция дешифровки файла
def decryption(file, password):

# задаём размер буфера
buffer_size = 512 * 1024

# вызываем метод расшифровки
pyAesCrypt.decryptFile(
str(file),
str(os.path.splitext(file)[0]),
password,
buffer_size
)

# чтобы видеть результат выводим на печать имя зашифрованного файла
print("[Файл '" + str(os.path.splitext(file)[0]) + "' дешифрован]")

# удаляем исходный файл
os.remove(file)

# функция сканирования директорий
def walking_by_dirs(dir, password):

# перебираем все поддиректории в указанной директории
for name in os.listdir(dir):
path = os.path.join(dir, name)

# если находим файл, то дешифруем его
if os.path.isfile(path):
try:
decryption(path, password)
except Exception as ex:
print(ex)
# если находим директорию, то повторяем цикл в поисках файлов
else:
walking_by_dirs(path, password)


password = input("Введите пароль для расшифровки: ")
walking_by_dirs("path", password)

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

# при использовании данного кода, файлы encryption.py и decryption.py будут удалены после исполнения
os.remove(str(sys.argv[0]))

Сохраните свои исполняемые файлы если будете использовать код os.remove(str(sys.argv[0])), иначе файлы будут удалены безвозвратно.

Как видите, всё просто. Наши скрипты готовы, Enjoy!

На канале Youtube канале PYTHONTODAY ты найдёшь видеоуроки:

  • - по созданию ботов
  • - парсингу сайтов
  • - приложений на смартфон
  • - машинному обучению и big data с нуля

Освой сетевую безопасность, и задавай вопросы в клубе.

Вступай в клуб Python разработчиков!

Читайте так-же:

Числа в Python

Настраиваем свой VPN

Установка VirtualBox в Ubuntu

Установка Python на Windows

Почему нельзя использовать бесплатный Wi-Fi

Как подключить PostgreSQL к Django

Спасибо, что дочитали до конца. Вы меня очень поддержите, если поставите "Лайк", оставите комментарий или ПОДПИШИТЕСЬ на мой канал :)