Где применяется хеширование? Приведите практический пример.

«Где применяется хеширование? Приведите практический пример.» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хеширование применяется для:

  1. Безопасного хранения паролей (самый частый кейс).
  2. Проверки целостности данных (хеш-суммы файлов).
  3. Быстрого поиска данных в хеш-таблицах.

Пример: хеширование пароля с "солью" (salt) на Java с использованием библиотеки BCrypt (best practice):

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class PasswordHashingExample {
    public static void main(String[] args) {
        // Создаем кодировщик (сила = 12, что является стандартом)
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12);

        String rawPassword = "mySecretPass123";
        // Генерация хеша. BCrypt автоматически добавляет уникальную соль.
        String hashedPassword = encoder.encode(rawPassword);
        System.out.println("Hashed password: " + hashedPassword);
        // Пример вывода: $2a$12$SomeRandomSaltAndHashCharactersHere

        // Верификация пароля при логине
        boolean isMatch = encoder.matches(rawPassword, hashedPassword);
        System.out.println("Password matches: " + isMatch); // true
    }
}

Почему BCrypt, а не SHA-256?

  • Соль (Salt): BCrypt автоматически генерирует и хранит уникальную случайную соль для каждого пароля, защищая от атак по радужным таблицам (rainbow tables).
  • Медленная функция: Алгоритм намеренно медленный и ресурсоемкий, что затрудняет brute-force атаки.
  • Адаптивная сложность: Параметр strength можно увеличивать со временем для противодействия росту вычислительной мощности.