Ответ
Это три принципиально разных процесса преобразования данных.
Хеширование — это односторонняя (необратимая) функция, которая преобразует произвольные данные в строку фиксированной длины (хеш). Основное назначение — проверка целостности данных и безопасное хранение паролей. По хешу нельзя восстановить исходные данные.
// Пример хеширования пароля в PHP
$hash = password_hash('myPassword123', PASSWORD_BCRYPT);
// Проверка пароля
$isValid = password_verify('myPassword123', $hash); // true
Кодирование (например, Base64, URL-encoding) — это обратимое преобразование данных в другой формат для удобства передачи или хранения. Оно не предназначено для обеспечения конфиденциальности.
$encoded = base64_encode('Hello World'); // SGVsbG8gV29ybGQ=
$decoded = base64_decode($encoded); // Hello World
Шифрование — это обратимое криптографическое преобразование данных с использованием секретного ключа. Его цель — обеспечение конфиденциальности. Для расшифровки необходим корректный ключ.
// Пример симметричного шифрования (AES) в PHP
$key = openssl_random_pseudo_bytes(32); // 256-битный ключ
$iv = openssl_random_pseudo_bytes(16); // Вектор инициализации
$ciphertext = openssl_encrypt('Sensitive Data', 'aes-256-cbc', $key, 0, $iv);
$plaintext = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, 0, $iv);
Кратко:
- Хеш — для проверки (пароль, целостность файла). Необратим.
- Кодирование — для изменения формата (передача в URL, JSON). Обратимо без ключа.
- Шифрование — для секретности (передача платежных данных). Обратимо только с ключом.
Ответ 18+ 🔞
Слушай, давай разберём эту тему, а то народ постоянно путается, как будто у них в голове манда с ушами. Три штуки, которые вроде бы похожи, а на деле — хуй с горы, то есть абсолютно разные.
Хеширование — это как отпечаток пальца для данных. Взял что угодно, скормил функции, а она тебе выплюнула строчку фиксированной длины. Главный прикол — обратно не собрать. Ёпта, это односторонняя дорога. Используется, чтобы проверить, не сломалось ли что при передаче, или, что важнее, чтобы пароли в базах не светить. Сохраняешь не сам пароль, а его хеш, и потом просто сверяешь отпечатки.
// Вот так, например, пароль хешируешь
$hash = password_hash('myPassword123', PASSWORD_BCRYPT);
// А проверяешь — совпадает ли введённое с тем, что в базе лежит
$isValid = password_verify('myPassword123', $hash); // true
По хешу исходник не восстановишь, и слава богу. Иначе бы все базы взламывали за пять минут.
Кодирование — это вообще не про секретность, это чисто техническая штука. Представь, тебе нужно бинарные данные в текст превратить, чтобы в JSON или URL запихнуть. Берёшь Base64 — и вжух! Обратимое преобразование, никакого ключа, просто меняем представление. Любой, кто знает алгоритм, декодирует обратно.
$encoded = base64_encode('Hello World'); // SGVsbG8gV29ybGQ=
$decoded = base64_decode($encoded); // Hello World
Это как архивировать файл в ZIP — не спрятать, а упаковать для удобства.
А вот шифрование — это уже серьёзно, ядерная вошь. Тут уже и ключи, и тайны, и конфиденциальность. Цель — спрятать информацию так, чтобы только тот, у кого есть правильный ключ, мог её прочитать. Обратимое, но доверия ебать ноль ко всем, у кого ключа нет.
// Допустим, шифруем что-то важное на AES
$key = openssl_random_pseudo_bytes(32); // Вот он, секретный ключ, 256 бит
$iv = openssl_random_pseudo_bytes(16); // И вектор инициализации для пущей надёжности
$ciphertext = openssl_encrypt('Sensitive Data', 'aes-256-cbc', $key, 0, $iv);
// А чтобы прочитать, нужен тот же самый ключ
$plaintext = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, 0, $iv);
Перепутаешь ключ — и накрылся медным тазом, данные капут.
Короче, резюмирую, чтобы в голове отложилось:
- Хеш — для проверки «а не обосрался ли я?». Пароль совпал? Файл цел? Необратимо.
- Кодировка — для удобства «как бы это в письме переслать». Обратимо, ключ не нужен.
- Шифрование — для секретности «чтоб враги не прочитали». Обратимо, но только с тем самым ключом.
Вот и вся магия. Главное — не использовать Base64 для «шифрования» паролей, а то сам от себя охуеешь, когда всё всплывёт.