← Назад к вопросам

Что такое шифровальщик?

1.0 Junior🔥 281 комментариев
#Тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Шифровальщик (Encryptor)

Шифровальщик — это механизм, алгоритм или программное средство, предназначенное для преобразования открытых (читаемых) данных в зашифрованный (нечитаемый без ключа) вид. В контексте Python и разработки, это может означать как криптографические функции для защиты информации, так и паттерны проектирования для преобразования данных.

Криптографическое шифрование

Криптографический шифровальщик использует математические алгоритмы для преобразования данных так, чтобы их можно было прочитать только с использованием специального ключа.

# Пример симметричного шифрования с использованием Fernet
from cryptography.fernet import Fernet

# Генерация ключа
key = Fernet.generate_key()
cipher = Fernet(key)

# Шифрование данных
plaintext = b"Secret message"
encrypted = cipher.encrypt(plaintext)
print(f"Зашифровано: {encrypted}")

# Расшифровка данных
decrypted = cipher.decrypt(encrypted)
print(f"Расшифровано: {decrypted.decode()}")

Типы шифрования

1. Симметричное шифрование — один ключ для шифрования и расшифровки

from cryptography.fernet import Fernet

key = Fernet.generate_key()
cipher = Fernet(key)
encrypted = cipher.encrypt(b"data")
decrypted = cipher.decrypt(encrypted)

2. Асимметричное шифрование — пара ключей (публичный и приватный)

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()

# Шифрование с публичным ключом
plaintext = b"Secret message"
encrypted = public_key.encrypt(
    plaintext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

# Расшифровка с приватным ключом
decrypted = private_key.decrypt(
    encrypted,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)

Шифрование паролей

Хеширование — это необратимое преобразование пароля в хеш для безопасного хранения

import bcrypt

# Хеширование пароля
password = b"MyPassword123"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
print(f"Хеш: {hashed}")

# Проверка пароля
if bcrypt.checkpw(password, hashed):
    print("Пароль верен")
else:
    print("Пароль неверен")

Альтернатива — scrypt

from cryptography.hazmat.primitives.kdf.scrypt import Scrypt
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend

password = b"MyPassword123"
salt = b"salt_16_bytes__"

kdf = Scrypt(
    salt=salt,
    length=32,
    n=2**14,
    r=8,
    p=1,
    backend=default_backend()
)
key = kdf.derive(password)

Шифрование данных в базе данных

from cryptography.fernet import Fernet
import base64

class SecureField:
    """Шифрованное поле для хранения чувствительных данных"""
    
    def __init__(self, key):
        self.cipher = Fernet(key)
    
    def encrypt(self, value: str) -> str:
        """Шифрует значение"""
        encrypted = self.cipher.encrypt(value.encode())
        return encrypted.decode()
    
    def decrypt(self, encrypted_value: str) -> str:
        """Расшифровывает значение"""
        decrypted = self.cipher.decrypt(encrypted_value.encode())
        return decrypted.decode()

# Использование
key = Fernet.generate_key()
secure_field = SecureField(key)

original = "credit_card_number"
encrypted = secure_field.encrypt(original)
print(f"Зашифровано: {encrypted}")

decrypted = secure_field.decrypt(encrypted)
print(f"Расшифровано: {decrypted}")

Шифрование при передаче (SSL/TLS)

В веб-приложениях используется HTTPS с SSL/TLS протоколом для шифрования данных при передаче

import requests

# HTTPS запросы автоматически шифруют данные
response = requests.get("https://api.example.com/data")

# Для custom SSL сертификатов
response = requests.get(
    "https://api.example.com/data",
    verify="/path/to/ca-bundle.crt"
)

Контекст в разработке

Где используются шифровальщики:

  1. Хранение паролей — bcrypt, argon2, scrypt
  2. Защита чувствительных данных — кредитные карты, SSN
  3. API ключи и токены — JWT с подписью
  4. Безопасное сообщение — HTTPS/TLS
  5. Криптографические подписи — проверка целостности данных

HMAC — аутентификация и целостность

import hmac
import hashlib

# Создание подписи
message = b"Important data"
secret_key = b"secret_key"
signature = hmac.new(secret_key, message, hashlib.sha256).hexdigest()
print(f"Подпись: {signature}")

# Проверка подписи
is_valid = hmac.compare_digest(
    hmac.new(secret_key, message, hashlib.sha256).hexdigest(),
    signature
)
print(f"Валидна: {is_valid}")

Best Practices

  1. Никогда не создавай свои криптографические алгоритмы — используй проверенные библиотеки
  2. Используй правильные алгоритмы — не используй MD5 или SHA1 для паролей
  3. Каждому пользователю свой хеш — благодаря salt в bcrypt
  4. Защищай ключи — не коммить их в код, используй environment variables
  5. Используй HTTPS везде — для всех API endpoints
  6. Ротация ключей — периодически обновляй криптографические ключи

Связанные концепции

  • Криптография — наука о шифровании и защите информации
  • Хеширование — необратимое преобразование данных
  • Подпись — способ подтвердить авторство и целостность
  • Сертификаты — документы, подтверждающие идентичность
  • PKI — Infrastructure for managing certificates and keys
Что такое шифровальщик? | PrepBro