Шифрование в Python с помощью алгоритма AES

AES Python шифрование

В предыдущей статье я рассказывал про шифрование в Python с помощью библиотек Cryptography и PyCryptodome. Сегодня продолжим и поговорим про алгоритм шифрования AES.

Еще по теме: Шифрование с помощью DES Python

Шифрование в Python с помощью алгоритма AES

Advanced Encryption Standard (AES) — это алгоритм блочного шифрования, принятый в качестве стандарта шифрования. Размер каждого блока алгоритма AES составляет 128 бит, а ключ может быть длиной 128, 192 или 256 бит.

Среди режимов шифрования можно выделить следующие:

  • Cipher-block chaining (CBC) — в этом режиме каждый блок открытого текста применяется с операцией XOR к предыдущему блоку шифртекста перед шифрованием. Таким образом, каждый блок шифртекста зависит от всего открытого текста, обработанного до этого момента. При работе с этим режимом, чтобы сделать каждое сообщение уникальным, мы обычно используем вектор инициализации (IV).
  • Electronic Code Book (ECB) — в  этом режиме сообщения разделяются на блоки, и каждый из них шифруется отдельно с использованием одного и того же ключа. Недостатком этого метода является то, что идентичные блоки открытого текста могут соответствовать блокам идентичного шифртекста, поэтому можно распознать эти паттерны и обнаружить открытый текст из шифртекста. Таким образом, его использование в настоящее время в качестве режима шифрования не рекомендуется.
  • Galois/Counter Mode (GCM) — это режим операции, используемый в блочных шифрах с размером блока 128 бит. AES-GCM стал очень популярным благодаря хорошей производительности и возможности использования улучшений аппаратного ускорения в процессорах. Кроме того, благодаря использованию вектора инициализации, мы можем случайным образом генерировать ключи для улучшения процесса шифрования двух сообщений с одним ключом.

Для использования алгоритма шифрования, такого как AES, необходимо импортировать его из Crypto.Cipher.AES. Так как API шифрования на уровне блока в Pycryptodome очень низкоуровневый, он принимает только ключи длиной 16, 24 или 32 байта для AES-128, AES-196 и AES-256 соответственно. Чем длиннее ключ, тем надежнее шифрование.

Таким образом, нужно убедиться, что длина данных кратна 16 байтам. Наш ключ AES должен быть длиной 16, 24 или 32 байта, а вектор инициализации (IV) должен быть длиной 16 байт. Он будет сгенерирован с использованием модулей random и string.

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

Для шифрования сообщения, для открытого текста используем метод encrypt(), а для дешифрования текста — метод decrypt().

AES 256 Python

Мы можем улучшить предыдущий скрипт, сгенерировав вектор инициализации с использованием модуля random и ключ с использованием PBKDF2, который позволяет генерировать случайный ключ из случайного числа, называемого «солью», размером ключа и количеством итераций.

Здесь мы используем алгоритм PBKDF2 для генерации случайного ключа, который мы будем использовать для шифрования и дешифрования. Переменная ciphertext относится к результату зашифрованных данных, а message_decrypted — к результату расшифрованных данных.

Мы также видим, что алгоритм PBKDF2 требует альтернативной «соли» и количества итераций. Случайное значение соли предотвращает атаку методом перебора ключей, и оно должно быть сохранено вместе с хешем пароля, рекомендуется использовать одну «соль» на каждый пароль.

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

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

Шифрование файлов с помощью AES Python

Для шифрования методом AES требуется, чтобы каждый блок был кратен 16 байтам. Поэтому мы читаем, шифруем и записываем данные частями. Размер должен быть кратен 16. Следующий код шифрует и дешифрует файл, выбранный пользователем.

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

Сначала мы инициализируем вектор инициализации и метод шифрования AES. Затем мы читаем файл блоками, кратными 16 байтам, с целью шифрования файла частями.

Для дешифрования, чтобы расшифровать файл с использованием AES, нужно перевернуть предыдущий процесс:

Это код определяет функцию для дешифрования файла с использованием алгоритма AES.

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

Следующий код представляет нашу основную функцию, которая предоставляет возможность шифровать или дешифровать содержимое файла:

Это будет вывод предыдущего сценария, где у нас есть возможность выбора шифрования и дешифрования файла.

Python AES шифрование

Результат предыдущего скрипта при шифровании файла приведет к созданию файла file.txt.encrypted, содержащего тот же контент, что и оригинальный файл но с зашифрованной информацией.

Заключение

Алгоритм AES предоставляет надежное и эффективное средство для шифрования данных в Python. С использованием библиотеки PyCryptodome, мы можем легко реализовать шифрование и дешифрование файлов с помощью AES. Помните, что безопасность данных — это ключевой аспект в современном мире информационных технологий, и использование надежных алгоритмов шифрования, таких как AES, способствует обеспечению этой безопасности.

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

ПОЛЕЗНЫЕ ССЫЛКИ:

Ban32

Хакер-самоучка, который может взломать тостер и настроить его на отправку вам утреннего приветствия в коде Морзе.

Добавить комментарий