Pycrypto в Python: шифрование и дешифрование данных

Pycrypto — это модуль Python, предоставляющий криптографические услуги. Модуль Pycrypto представляет собой набор безопасных хэш-функций, таких как RIPEMD160 и SHA256, и различных алгоритмов шифрования, таких как AES, DES, RSA, ElGamal и т. д. Например, AES является быстрым, надежным и фактическим стандартом для симметричного шифрования.

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

Advanced Encryption Standard(AES) — это симметричный блочный шифр.

AES включает в себя три блочных шифра:

  1. АЭС-128
  2. АЭС-192
  3. АЭС-256

AES-128 использует 128-битный ключ для шифрования и дешифрования блока сообщений, AES-192 использует 192-битный ключ, а AES-256 использует 256-битный ключ для шифрования и дешифрования сообщений.

Каждый шифр шифрует и дешифрует данные блоками по 128 бит, используя криптографические ключи на 128, 192 и 256 бит.

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

Ключи любой длины могут использоваться для защиты конфиденциального и секретного уровней. Для совершенно секретной информации требуются 192-битные или 256-битные ключи.

В этом примере мы увидим шифрование AES и дешифрование 16-байтового текста.

Шаги для создания шифрования и дешифрования в Python

Чтобы использовать шифрование и дешифрование AES в Python, мы должны выполнить следующие шаги.

  1. Генерация секретного ключа.
  2. Генерация вектора инициализации.
  3. Создание шифра AES.
  4. Зашифровать сообщение с помощью AES.
  5. Расшифровать сообщение.

Генерация секретного ключа

Шифрование AES требует надежного ключа. Чем сильнее ключ, тем сильнее ваше шифрование. Это, пожалуй, самое слабое звено в цепи. Чтобы сгенерировать секретный ключ, мы будем использовать метод urandom() модуля os.

Функция Python os.urandom() используется для генерации строки случайного размера в байтах, подходящей для криптографического использования, или, можно сказать, этот метод генерирует строку, содержащую случайные символы.

Выход

Итак, наш secret_key сгенерирован. Вы должны сгенерировать надежный ключ для шифрования AES.

Переходим к следующему шагу.

Создание вектора инициализации

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

Мы сгенерируем вектор инициализации с помощью функции os.urandom().

Выход

Итак, наш iv сгенерирован.

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

Создайте шифр AES

Мы создадим шифр AES и будем использовать его для шифрования строки(или набора байтов; данные не обязательно должны быть только текстовыми).

Шифр AES создается в режиме CBC, в котором каждый блок «привязан» к предыдущему блоку в потоке.(Вам не обязательно знать точные детали, если не заинтересованы. Все, что вам нужно знать, это — использовать режим CBC).

Кроме того, для шифрования AES с использованием pycrypto необходимо убедиться, что данные кратны 16 байтам. Заполните буфер, если это не так, и включите размер данных в начале вывода, чтобы получатель мог адекватно расшифровать.

В приведенном выше коде мы создали два импортированных модуля.

  1. urandom
  2. АЕС

Чтобы сгенерировать объект шифрования AES, мы должны использовать метод AES.new().

Теперь метод AES.new() принимает три параметра.

  1. secret_key
  2. AES.MODE.CBC
  3. iv

AES.MODE.CBC — один из классических режимов работы симметричных блочных шифров.

Классические режимы работы симметричных блочных шифров

Константы модуля для режимов работы, поддерживаемых AES:

  • MODE_ECB: Электронная кодовая книга(ECB)
  • MODE_CBC: Цепочка шифровальных блоков(CBC)
  • MODE_CFB: Шифрование обратной связи(CFB)
  • MODE_OFB: Выходная обратная связь(OFB)
  • MODE_CTR: режим счетчика(CTR)
  • MODE_OPENPGP: режим OpenPGP
  • MODE_CCM: счетчик с режимом CBC-MAC(CCM)
  • MODE_EAX: режим EAX
  • MODE_GCM: режим счетчика Галуа(GCM)
  • MODE_SIV: синтетический вектор инициализации(SIV)
  • MODE_OCB: Смещенная кодовая книга(OCB)

Зашифровать сообщение с помощью AES

Это последний шаг шифрования AES.

Сначала мы определим сообщение, которое необходимо зашифровать, а затем воспользуемся функцией AES.encrypt().

Выход

Вот и все. Мы зашифровали сообщение с помощью AES в Python.

Расшифровать сообщение в Python

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

Мы будем использовать метод AES decrypt(), чтобы расшифровать зашифрованное сообщение и получить исходный текст.

Выход

Вот и все. Получаем исходный текст.

Оцените статью

Автор статей и разработчик, делюсь знаниями.

Программирование на Python