Чтение онлайн

на главную - закладки

Жанры

Создай свой VPN. Безопасное использование интернета
Шрифт:

from cryptography.hazmat.primitives import padding

import os

def encrypt_message(message, key):

backend = default_backend

iv = os.urandom(16) # Инициализирующий вектор должен быть уникальным для каждого сообщения

cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)

encryptor = cipher.encryptor

padder = padding.PKCS7(128).padder # Для дополнения сообщения до кратности блоку

padded_data = padder.update(message) + padder.finalize

ciphertext = encryptor.update(padded_data) + encryptor.finalize

return iv + ciphertext

def decrypt_message(ciphertext, key):

backend = default_backend

iv = ciphertext[:16] #

Получаем инициализирующий вектор из шифротекста

ciphertext = ciphertext[16:] # Оставшаяся часть – собственно шифротекст

cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)

decryptor = cipher.decryptor

padded_plaintext = decryptor.update(ciphertext) + decryptor.finalize

unpadder = padding.PKCS7(128).unpadder

plaintext = unpadder.update(padded_plaintext) + unpadder.finalize

return plaintext

# Пример использования:

message = b"Hello, world!"

key = os.urandom(32) # Генерируем случайный 256-битный ключ

ciphertext = encrypt_message(message, key)

print("Зашифрованное сообщение:", ciphertext.hex)

plaintext = decrypt_message(ciphertext, key)

print("Расшифрованное сообщение:", plaintext.decode)

```

Этот код использует AES в режиме CBC (Cipher Block Chaining) для шифрования и дешифрования сообщения. Он также использует PKCS7 для дополнения сообщения до кратности размеру блока. Обратите внимание, что в этом примере используется генерация случайного ключа и инициализирующего вектора с помощью `os.urandom`.

Давайте разберем код пошагово:

1. Импорт необходимых модулей:

Мы импортируем необходимые модули из библиотеки `cryptography`: `Cipher` для создания объекта шифра, `algorithms` для выбора алгоритма шифрования (в данном случае AES), `modes` для выбора режима шифрования (в данном случае CBC), `padding` для работы с дополнением сообщения, и `default_backend` для выбора бэкенда по умолчанию.

– Также мы импортируем модуль `os`, чтобы использовать функцию `urandom` для генерации случайных данных.

2. Функция `encrypt_message`:

– Функция принимает сообщение и ключ в качестве аргументов.

– Генерируется случайный инициализирующий вектор (IV) длиной 16 байт.

– Создается объект шифра AES в режиме CBC с заданным ключом и IV.

– Создается объект паддинга PKCS7 для дополнения сообщения до кратности размеру блока (128 бит).

– Сообщение дополняется и шифруется с помощью AES.

– Возвращается IV вместе с зашифрованным текстом.

3. Функция `decrypt_message`:

– Функция принимает зашифрованный текст и ключ в качестве аргументов.

– IV извлекается из шифротекста.

– Создается объект шифра AES

в режиме CBC с заданным ключом и IV.

– Расшифровывается зашифрованный текст с помощью AES.

– Применяется обратное дополнение PKCS7 к расшифрованному тексту.

– Возвращается расшифрованный текст.

4. Пример использования:

– Создается случайное сообщение `b"Hello, world!"`.

– Генерируется случайный ключ длиной 32 байта (256 бит).

– Сообщение шифруется с использованием ключа.

– Зашифрованный текст выводится на экран в шестнадцатеричном формате.

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

– Расшифрованный текст выводится на экран.

Библиотека `cryptography` – это библиотека на языке Python, которая предоставляет высокоуровневые криптографические примитивы для обеспечения безопасности данных. Она предоставляет удобный интерфейс для шифрования, хеширования, генерации случайных чисел, а также других криптографических операций.

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

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

Алгоритм RSA (Rivest–Shamir–Adleman) является одним из самых распространенных асимметричных алгоритмов шифрования. В отличие от симметричного шифрования, где для шифрования и дешифрования используется один и тот же ключ, в асимметричном шифровании используется пара ключей: публичный и приватный.

1. Публичный ключ:

– Публичный ключ используется для шифрования данных.

– Он может быть свободно распространен и доступен для всех.

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

2. Приватный ключ:

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

– Этот ключ должен храниться в тайне и быть известным только владельцу.

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

Процесс шифрования с использованием алгоритма RSA следующий:

1. Получатель генерирует пару ключей: публичный и приватный.

2. Он распространяет свой публичный ключ, а приватный ключ остается в секрете.

Поделиться:
Популярные книги

Темный Лекарь

Токсик Саша
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Planescape: Torment: "Пытка Вечностью"

Хесс Рисс
Фантастика:
фэнтези
5.00
рейтинг книги
Planescape: Torment: Пытка Вечностью

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

От океана до степи

Стариков Антон
3. Игра в жизнь
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
От океана до степи

Возвышение Меркурия. Книга 15

Кронос Александр
15. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 15

Предложение джентльмена

Куин Джулия
3. Бриджертоны
Любовные романы:
исторические любовные романы
8.90
рейтинг книги
Предложение джентльмена

Хуррит

Рави Ивар
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Хуррит

Конунг Туманного острова

Чайка Дмитрий
12. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Конунг Туманного острова

Черный Маг Императора 12

Герда Александр
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 12

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Выбор варианта

Ром Полина
Фантастика:
фэнтези
5.50
рейтинг книги
Выбор варианта

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке