Под криптографической системой понимается набор алгоритмов и протоколов, предназначенных для защиты связи и обмена данными путем преобразования открытого текста в зашифрованный текст. Вот несколько методов, обычно используемых в криптографических системах, а также примеры кода:
- Симметричное шифрование (с использованием AES):
Симметричное шифрование использует один ключ как для шифрования, так и для дешифрования. Алгоритм Advanced Encryption Standard (AES) широко используется в симметричном шифровании.
from cryptography.fernet import Fernet
# Generate a random key
key = Fernet.generate_key()
# Create a cipher object
cipher = Fernet(key)
# Encrypt a message
plaintext = b"Hello, World!"
ciphertext = cipher.encrypt(plaintext)
# Decrypt the ciphertext
decrypted_text = cipher.decrypt(ciphertext)
print(decrypted_text) # Output: b"Hello, World!"
- Асимметричное шифрование (с использованием RSA).
Асимметричное шифрование предполагает использование пары ключей: открытого ключа для шифрования и закрытого ключа для дешифрования. Алгоритм RSA — это распространенный алгоритм асимметричного шифрования.
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
# Generate a private/public key pair
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
# Get the public key
public_key = private_key.public_key()
# Encrypt a message using the public key
plaintext = b"Hello, World!"
ciphertext = public_key.encrypt(
plaintext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Decrypt the ciphertext using the private key
decrypted_text = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
print(decrypted_text) # Output: b"Hello, World!"
- Хеш-функции (с использованием SHA-256):
Хеш-функции — это односторонние функции, которые преобразуют данные в хеш-значение фиксированного размера. Алгоритм SHA-256 обычно используется для хеширования.
import hashlib
# Hash a message using SHA-256
message = b"Hello, World!"
hash_value = hashlib.sha256(message).hexdigest()
print(hash_value) # Output: "2ef7bde608ce5404e97d5f042f95f89f1c232871"
- Цифровые подписи (с использованием RSA и SHA-256).
Цифровые подписи обеспечивают целостность и подлинность сообщений. Вот пример использования RSA и SHA-256 для цифровых подписей:
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
# Sign a message using RSA and SHA-256
message = b"Hello, World!"
signature = private_key.sign(
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# Verify the signature using the public key
public_key.verify(
signature,
message,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)