Создай свой VPN. Безопасное использование интернета. Джейд Картер
Чтение книги онлайн.

Читать онлайн книгу Создай свой VPN. Безопасное использование интернета - Джейд Картер страница 8

СКАЧАТЬ cryptography.hazmat.primitives.asymmetric import rsa

      from cryptography.hazmat.primitives.asymmetric import padding

      from cryptography.hazmat.backends import default_backend

      # Генерация ключевой пары RSA

      def generate_rsa_keys():

      private_key = rsa.generate_private_key(

      public_exponent=65537,

      key_size=2048,

      backend=default_backend()

      )

      public_key = private_key.public_key()

      return private_key, public_key

      # Шифрование сообщения с использованием публичного ключа

      def encrypt_message(message, public_key):

      ciphertext = public_key.encrypt(

      message.encode(),

      padding.OAEP(

      mgf=padding.MGF1(algorithm=serialization.NoEncryption()),

      algorithm=serialization.NoEncryption(),

      label=None

      )

      )

      return ciphertext

      # Дешифрование сообщения с использованием приватного ключа

      def decrypt_message(ciphertext, private_key):

      plaintext = private_key.decrypt(

      ciphertext,

      padding.OAEP(

      mgf=padding.MGF1(algorithm=serialization.NoEncryption()),

      algorithm=serialization.NoEncryption(),

      label=None

      )

      )

      return plaintext.decode()

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

      if __name__ == "__main__":

      # Генерация ключевой пары

      private_key, public_key = generate_rsa_keys()

      # Оригинальное сообщение

      original_message = "Hello, Bob!"

      # Шифрование сообщения

      encrypted_message = encrypt_message(original_message, public_key)

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

      # Дешифрование сообщения

      decrypted_message = decrypt_message(encrypted_message, private_key)

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

      ```

      Этот код выполняет следующие шаги:

      1. Генерация ключевой пары RSA (`generate_rsa_keys()`):

      – В этой функции создается новый объект приватного ключа с помощью метода `generate_private_key()` из модуля `rsa`. Мы указываем `public_exponent=65537` и `key_size=2048` для генерации ключа с параметрами, рекомендуемыми для RSA.

      – Затем мы получаем публичный ключ из приватного ключа с помощью метода `public_key()`.

      2. Шифрование сообщения (`encrypt_message(message, public_key)`):

      – В этой функции мы шифруем сообщение с использованием публичного ключа Боба.

      – Мы вызываем метод `encrypt()` у объекта публичного ключа. В качестве аргумента мы передаем байтовую строку, представляющую сообщение, которую мы хотим зашифровать.

      – Мы также передаем параметры шифрования, включая метод дополнения OAEP (Optimal Asymmetric Encryption Padding), который является стандартным для RSA.

      3. Дешифрование сообщения (`decrypt_message(ciphertext, private_key)`):

      – В этой функции мы дешифруем зашифрованное сообщение с использованием приватного ключа Боба.

      – Мы вызываем метод `decrypt()` у объекта приватного ключа. В качестве аргумента мы передаем зашифрованный текст.

      – Мы также передаем параметры дешифрования, включая тот же метод дополнения OAEP.

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

      – Мы генерируем ключевую пару RSA.

      – Создаем оригинальное сообщение "Hello, Bob!".

      – Шифруем это сообщение с использованием публичного ключа.

      – Дешифруем зашифрованное СКАЧАТЬ