Ответ
Хеширование применяется для:
- Безопасного хранения паролей (самый частый кейс).
- Проверки целостности данных (хеш-суммы файлов).
- Быстрого поиска данных в хеш-таблицах.
Пример: хеширование пароля с "солью" (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можно увеличивать со временем для противодействия росту вычислительной мощности.