From 85ee7e22627267b14d3f30dc1928dfa625fd87cd Mon Sep 17 00:00:00 2001 From: stirelshka8_BigARM Date: Sat, 1 Mar 2025 18:34:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B8=D1=84=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D1=80=D0=B0=D1=81=D1=88=D0=B8?= =?UTF-8?q?=D1=84=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D0=BC=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- decrypt.py | 28 +++++++++++++++++++++++ encrypt.py | 29 ++++++++++++++++++++++++ main.py | 65 +++++------------------------------------------------- 3 files changed, 63 insertions(+), 59 deletions(-) create mode 100644 decrypt.py create mode 100644 encrypt.py diff --git a/decrypt.py b/decrypt.py new file mode 100644 index 0000000..2ccf63d --- /dev/null +++ b/decrypt.py @@ -0,0 +1,28 @@ +import base64 +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import serialization, hashes +from cryptography.hazmat.primitives.asymmetric import padding + +def load_keys_private(private_key_file): + with open(private_key_file, 'rb') as f: + private_key_data = f.read() + + private_key = serialization.load_pem_private_key( + private_key_data, + password=None, + backend=default_backend() + ) + return private_key + +def decrypt_message(encrypted_message, private_key_file): + private_key = load_keys_private(private_key_file) + encrypted_bytes = base64.b64decode(encrypted_message) + decrypted = private_key.decrypt( + encrypted_bytes, + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=None + ) + ) + return decrypted.decode() diff --git a/encrypt.py b/encrypt.py new file mode 100644 index 0000000..e0970e7 --- /dev/null +++ b/encrypt.py @@ -0,0 +1,29 @@ +import base64 +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import serialization, hashes +from cryptography.hazmat.primitives.asymmetric import padding + + +def load_keys_public(public_key_file): + with open(public_key_file, 'rb') as f: + public_key_data = f.read() + + public_key = serialization.load_pem_public_key( + public_key_data, + backend=default_backend() + ) + return public_key + + +def encrypt_message(message, public_key_file): + public_key = load_keys_public(public_key_file) + encrypted = public_key.encrypt( + message.encode(), + padding.OAEP( + mgf=padding.MGF1(algorithm=hashes.SHA256()), + algorithm=hashes.SHA256(), + label=None + ) + ) + return base64.b64encode(encrypted).decode('utf-8') + diff --git a/main.py b/main.py index 6a3b5f1..794a254 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,9 @@ import os -import base64 from cryptography.hazmat.backends import default_backend -from cryptography.hazmat.primitives import serialization, hashes -from cryptography.hazmat.primitives.asymmetric import rsa, padding +from cryptography.hazmat.primitives import serialization +from cryptography.hazmat.primitives.asymmetric import rsa +from encrypt import encrypt_message +from decrypt import decrypt_message KEYS_DIR = 'keys' PRIVATE_KEY_FILE = f'{KEYS_DIR}/private-key.pem' @@ -39,60 +40,6 @@ def save_keys(private_key, public_key): )) -def load_keys_private(): - # Загрузка закрытого ключа - with open(PRIVATE_KEY_FILE, 'rb') as f: - private_key_data = f.read() - - private_key = serialization.load_pem_private_key( - private_key_data, - password=None, - backend=default_backend() - ) - - return private_key - - -def load_keys_public(): - # Загрузка открытого ключа - with open(PUBLIC_KEY_FILE, 'rb') as f: - public_key_data = f.read() - - public_key = serialization.load_pem_public_key( - public_key_data, - backend=default_backend() - ) - - return public_key - - -def encrypt_message(message): - public_key = load_keys_public() - encrypted = public_key.encrypt( - message.encode(), - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.SHA256()), - algorithm=hashes.SHA256(), - label=None - ) - ) - return base64.b64encode(encrypted).decode('utf-8') - - -def decrypt_message(encrypted_message): - private_key = load_keys_private() - encrypted_bytes = base64.b64decode(encrypted_message) - decrypted = private_key.decrypt( - encrypted_bytes, - padding.OAEP( - mgf=padding.MGF1(algorithm=hashes.SHA256()), - algorithm=hashes.SHA256(), - label=None - ) - ) - return decrypted.decode() - - # Запрос выбора действия action = input("Хотите сгенерировать новые ключи (1) или использовать существующие (2)? ") @@ -111,9 +58,9 @@ elif action == '2': # Шифрование сообщения message = "Это лицензионный ключ." -encrypted_message = encrypt_message(message) +encrypted_message = encrypt_message(message, PUBLIC_KEY_FILE) print("Зашифрованное сообщение (Base64):", encrypted_message) # Дешифрование сообщения -decrypted_message = decrypt_message(encrypted_message) +decrypted_message = decrypt_message(encrypted_message, PRIVATE_KEY_FILE) print("Расшифрованное сообщение:", decrypted_message)