Documentation Blog Login SignUp
Menu

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

July 23, 2020 1783 просмотра 0 комментариев
Telegram Twitter Instagram Zen
Содержание#Интро#Скрипт шифрования#Скрипт дешифровки

 

Интро

Всем привет. Сегодня мы с вами напишем программу для шифрования файлов и директорий на 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!

Больше интересного?

Основные команды в терминале Linux

Установка последней версии Python на Linux

Установка и использование Screen в Linux


Комментарии
0

Пожалуйста войдите или зарегистрируйтесь что-бы оставить комментарий.