Это два основных подхода к шифрованию данных. Они различаются по способу использования ключей для шифрования и дешифрования.
🚩Симметричная криптография
Использует один и тот же ключ как для шифрования, так и для дешифрования данных. Этот ключ должен быть известен как отправителю, так и получателю, что требует безопасного способа передачи ключа между ними.
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# Генерация ключа
key = get_random_bytes(16) # 16 байт = 128 бит
# Создание шифра
cipher = AES.new(key, AES.MODE_EAX)
# Шифрование данных
data = b'Secret message'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)
print(f'Ciphertext: {ciphertext}')
# Дешифрование данных
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
print(f'Plaintext: {plaintext}')
🚩Асимметричная криптография
Использует пару ключей: открытый ключ и закрытый ключ. Открытый ключ используется для шифрования данных и может быть свободно распространяем, в то время как закрытый ключ используется для дешифрования и должен оставаться в секрете. Это решает проблему передачи ключей, так как отправитель может зашифровать данные открытым ключом получателя, а только получатель сможет расшифровать их с помощью своего закрытого ключа.
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes
# Генерация пары ключей
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
public_key = private_key.public_key()
# Шифрование данных
message = b'Secret message'
ciphertext = public_key.encrypt(
message,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(f'Ciphertext: {ciphertext}')
# Дешифрование данных
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(f'Plaintext: {plaintext}')
🚩Сравнение симметричной и асимметричной криптографии
🟠Ключи
Симметричная: Один ключ для шифрования и дешифрования.
Асимметричная: Пара ключей — открытый для шифрования и закрытый для дешифрования.
🟠Безопасность
Симметричная: Требует безопасной передачи ключа, что может быть сложно.
Асимметричная: Обеспечивает безопасную передачу ключей через использование открытого ключа.
Ставь 👍 и забирай 📚 Базу знаний