Название: Создай свой VPN. Безопасное использование интернета
Автор: Джейд Картер
Издательство: Автор
isbn:
isbn:
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!".
– Шифруем это сообщение с использованием публичного ключа.
– Дешифруем зашифрованное СКАЧАТЬ