Шифрование RSA — это криптосистема с открытым ключом, что означает, что она использует два разных ключа: открытый ключ для шифрования и закрытый ключ для дешифрования.
Эти ключи математически связаны. Работа шифрования RSA описывается следующим образом:
Генерация ключей
- Выбираются два больших простых числа p и q.
- Вычислите n = p * q и φ(n) = (p-1) (q-1), где φ(n) — функция Эйлера.
- Выберите целое число e такое, что 1 ‹ e ‹ φ(n) и gcd(e, φ(n)) = 1. Это e станет общедоступным показателем.
- Вычислите модульную мультипликативную обратную величину e по модулю φ(n), чтобы получить d, частный показатель.
Шифрование
- Преобразуйте открытое текстовое сообщение в числовое значение, M.
- Вычислите зашифрованный текст C = M^e mod n.
Расшифровка
- Для расшифровки используйте закрытый ключ: M = C^d mod n.
Реализация RSA на Python
from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization # Key generation private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, ) public_key = private_key.public_key() # Serialization to PEM format (for storage) private_pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) public_pem = public_key.public_bytes( encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo ) # Encryption and decryption plaintext = b"Hello, RSA!" ciphertext = public_key.encrypt(plaintext, padding.PKCS1v15()) decrypted = private_key.decrypt(ciphertext, padding.PKCS1v15()) print("Original message:", plaintext) print("Encrypted message:", ciphertext) print("Decrypted message:", decrypted)
На простом английском языке
Спасибо, что вы являетесь частью нашего сообщества! Прежде чем уйти:
- Обязательно аплодируйте и следуйте за автором! 👏
- Еще больше контента вы можете найти на PlainEnglish.io 🚀
- Подпишитесь на нашу бесплатную еженедельную рассылку. 🗞️
- Следуйте за нами в Twitter(X), LinkedIn, YouTube и Discord.