Java библиотека
MAX ·
Хеширование vs шифрование vs кодирование
Эти три понятия часто путают в разработке. Все они могут преобразовывать данные в другое представление, но предназначены для совершенно разных задач.
Главный вопрос: что вы хотите сделать — проверить данные, защитить их или просто изменить способ их представления?
Короткая шпаргалка:
• Hashing (хеширование) → преобразование в одну сторону.
• Encryption (шифрование) → обратимое преобразование с помощью ключа.
• Encoding (кодирование) → обратимое преобразование без секретного ключа.
1. Хеширование (Hashing). Хеширование преобразует входные данные в хеш фиксированной длины.
Вход: Hello123
↓
SHA-256
↓
Хеш: 64-символьное шестнадцатеричное значение
Пример на Java:
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(
"Hello123".getBytes(StandardCharsets.UTF_8)
);
Практически невозможно восстановить исходные данные из надёжного криптографического хеша.
Где используется:
• Проверка целостности данных.
• Хранение паролей (с помощью специализированных алгоритмов хеширования паролей).
• Цифровые подписи.
• Проверка файлов.
Для хранения паролей следует использовать Argon2id, bcrypt, scrypt или PBKDF2 с подходящими солью и параметрами, а не обычный SHA-256.
Запомните: можно ли проверить данные, не восстанавливая оригинал?
2. Шифрование (Encryption). Шифрование преобразует читаемые данные в зашифрованный текст с помощью криптографического ключа.
Исходный текст
↓
Шифрование + ключ
↓
Шифротекст
↓
Расшифровка + ключ
↓
Исходный текст
Например:
Вход: AccountNumber123
Выход: Зашифрованный текст
С правильным ключом исходные данные можно восстановить.
Где используется:
• Защита конфиденциальных данных.
HTTPS/TLS.
• Шифрование баз данных.
• Безопасная передача информации.
• Защита файлов.
Запомните: данные должны оставаться секретными, но при необходимости их можно восстановить.
3. Кодирование (Encoding). Кодирование преобразует данные в другое представление. Это не механизм обеспечения безопасности.
Вход: Hello
↓
Base64 Encoding
↓
SGVsbG8=
↓
Base64 Decoding
↓
Hello
Пример на Java:
String encoded = Base64.getEncoder()
.encodeToString("Hello".getBytes());
String decoded = new String(
Base64.getDecoder().decode(encoded)
);
Где используется:
• Base64.
• URL-кодирование.
• Форматы сериализации данных.
• Передача бинарных данных в текстовом виде.
Запомните: меняется представление данных, а не уровень их защиты.
Распространённые заблуждения:
• Base64 — это шифрование.
• Хеширование — это шифрование.
• Зашифрованные данные невозможно расшифровать.
• SHA-256 сам по себе подходит для хранения паролей.
Всё это неверно.
Пример из реальной разработки: Представим, что нужно сохранить пароль пользователя:
MySecret123
• Хеширование: сохраняем надёжный хеш пароля и используем его для проверки при входе.
• Шифрование: защищаем данные, которые в дальнейшем потребуется расшифровать.
• Кодирование: преобразуем данные в формат, удобный для передачи.
Главное, что нужно запомнить:
• Hashing → Проверить.
• Encryption → Защитить.
• Encoding → Представить.
Если нужна конфиденциальность — используйте шифрование. Если нужно проверить целостность — хеширование. Если требуется изменить представление данных — кодирование.
Java Библиотека | Мы в Телеграм
