Интро
Всем привет. Сегодня мы с вами напишем программу для шифрования файлов и директорий на 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
Спасибо, что дочитали до конца. Вы меня очень поддержите, если поставите "Лайк", оставите комментарий или ПОДПИШИТЕСЬ на мой канал :)