Чем принципиально отличается хеширование от шифрования?

Ответ

Ключевое различие — обратимость операции. Хеширование — односторонний процесс, а шифрование — двусторонний.

Хеширование (Hashing):

  • Цель: Проверка целостности и подлинности данных.
  • Процесс: Необратимый (односторонний). Из хеша невозможно восстановить исходные данные.
  • Результат: Хеш-сумма (или дайджест) — строка фиксированной длины, уникальная для входных данных. Даже небольшое изменение в данных кардинально меняет хеш.
  • Примеры использования:
    • Хранение паролей (в базе хранится хеш, а не сам пароль).
    • Проверка целостности файлов (контрольные суммы MD5, SHA-256).
    • Цифровые подписи.

Шифрование (Encryption):

  • Цель: Обеспечение конфиденциальности данных.
  • Процесс: Обратимый (двусторонний). Данные, зашифрованные с помощью ключа, могут быть расшифрованы (дешифрованы) с помощью того же или парного ключа.
  • Результат: Шифротекст (ciphertext), длина которого обычно зависит от длины исходных данных.
  • Примеры использования:
    • Передача конфиденциальных данных по сети (HTTPS, TLS).
    • Шифрование файлов на диске (Full Disk Encryption).
    • Защищенные мессенджеры.
import hashlib
from cryptography.fernet import Fernet

# --- Хеширование ---
password = b"my_secret_password"
# Получаем хеш пароля. Восстановить 'password' из 'hashed_password' невозможно.
hashed_password = hashlib.sha256(password).hexdigest()
print(f"Hashed: {hashed_password}")

# --- Шифрование ---
key = Fernet.generate_key() # Ключ для шифрования и дешифрования
cipher_suite = Fernet(key)

secret_message = b"This is a secret message."
# Шифруем сообщение. Его можно будет расшифровать, зная ключ.
cipher_text = cipher_suite.encrypt(secret_message)
print(f"Encrypted: {cipher_text}")

# Расшифровываем обратно, используя тот же ключ
original_message = cipher_suite.decrypt(cipher_text)
print(f"Decrypted: {original_message.decode()}")

Итог: Хеширование доказывает, что данные не изменились, а шифрование скрывает содержимое данных.

Ответ 18+ 🔞

Давай разберёмся, в чём тут, блядь, разница, а то народ путает, как слепой кот в подвале. Главный момент — обратимость, ёпта. Хеширование — это как сходить в туалет по-большому, обратно не соберёшь, а шифрование — это как положить вещь в сейф с ключом, достать можно, если ключ есть.

Хеширование (Hashing):

  • Зачем нужно: Чтобы проверить, не накосячил ли кто с данными. Целостность, блядь, и подлинность.
  • Как работает: В одну сторону, нахуй! Сделал хеш — и всё, пиши пропало. Из этой абракадабры исходные данные не восстановить, хоть тресни. Это как отпечаток пальца для данных.
  • Что получается: Хеш-сумма, дайджест — строка фиксированной длины. Чуть тронь исходник — хеш меняется так, что мать не узнает.
  • Где применяется, блядь:
    • Пароли в базах хранят (умные, сука, хранят хеш, а не сам пароль).
    • Проверка, не сломался ли файл при скачивании (эти ваши MD5, SHA-256).
    • Цифровые подписи, всякая серьёзная хуйня.

Шифрование (Encryption):

  • Зачем нужно: Чтобы спрятать смысл, сделать секрет. Конфиденциальность, ёбана.
  • Как работает: Туда-сюда! Зашифровал с ключом — расшифровал с ключом (или с парным). Всё обратимо, если знать, как.
  • Что получается: Шифротекст, этакая каша, длина которой обычно зависит от длины исходного текста.
  • Где применяется, блядь:
    • Пересылка тайных посланий по интернету (HTTPS, TLS — это всё оно).
    • Шифрование жёсткого диска, чтобы воры не прочитали твоё порно.
    • Защищённые переписки в мессенджерах.
import hashlib
from cryptography.fernet import Fernet

# --- Хеширование ---
password = b"my_secret_password"
# Делаем хеш от пароля. Из 'hashed_password' обратно 'password' — нихуя не выйдет.
hashed_password = hashlib.sha256(password).hexdigest()
print(f"Hashed: {hashed_password}")

# --- Шифрование ---
key = Fernet.generate_key() # Ключ, которым и шифруем, и расшифровываем
cipher_suite = Fernet(key)

secret_message = b"This is a secret message."
# Шифруем послание. Зная ключ — можно всё вернуть.
cipher_text = cipher_suite.encrypt(secret_message)
print(f"Encrypted: {cipher_text}")

# А вот и расшифровываем обратно, ключ же есть!
original_message = cipher_suite.decrypt(cipher_text)
print(f"Decrypted: {original_message.decode()}")

Короче, ёпта: Хеширование доказывает, что данные остались теми же самыми, а шифрование прячет, что там внутри написано. Не путай, а то получится пиздопроебибна, а не безопасность.