javascript42
Главная
Все учебники
Блог
Учебник bcrypt.js
Введение в bcrypt.js
Что такое хеширование паролей и зачем оно нужно
Краткая история bcrypt: от blowfish до современных реализаций
Место bcrypt среди других алгоритмов хеширования
Обзор экосистемы: bcrypt, bcryptjs, node.bcrypt.js — в чём разница
Установка и подключение библиотеки
Теоретические основы
Симметричное шифрование против одностороннего хеширования
Как работает алгоритм blowfish
Структура bcrypt-хеша: версия, cost factor, соль, хеш
Что такое соль и почему она меняет всё
Rainbow tables и атаки по словарю: почему bcrypt защищает от них
Коллизии и их значимость для хеширования паролей
Детерминированность против стохастичности в контексте безопасности
Параметры и конфигурация
Cost factor (rounds): что это и как влияет на производительность
Подбор оптимального значения rounds для разных окружений
Ограничение длины входной строки: 72 байта и его последствия
Версии алгоритма: $2a$, $2b$, $2y$ — различия и совместимость
Кодировка входных данных и потенциальные ловушки
Базовое использование
Синхронное хеширование: bcrypt.hashSync
Асинхронное хеширование с callback: bcrypt.hash
Асинхронное хеширование через Promise
Синхронная проверка пароля: bcrypt.compareSync
Асинхронная проверка пароля: bcrypt.compare
Генерация соли вручную: bcrypt.genSalt и bcrypt.genSaltSync
Передача готовой соли в функцию хеширования
Обработка null, undefined и пустых строк
Асинхронная модель и event loop
Почему синхронные методы опасны в production
Bcrypt и блокировка event loop в Node.js
Использование async/await с bcrypt.js
Promise-цепочки и обработка ошибок
Параллельное хеширование нескольких паролей
Тайм-аут операций и защита от зависания
Интеграция в архитектуру приложения
Слой работы с паролями: где расположить логику хеширования
Хеширование при регистрации пользователя
Проверка пароля при аутентификации
Смена пароля: правильный алгоритм действий
Сброс пароля и временные токены
Хранение хешей в базе данных: тип поля и длина строки
Миграция устаревших хешей на новый cost factor
Повторное хеширование при входе пользователя
Работа с популярными фреймворками
Express.js: middleware для хеширования паролей
Koa: обработка паролей в контексте контекста запроса
Fastify: хуки и плагины для работы с bcrypt
NestJS: провайдеры и инъекция зависимостей
Mongoose: pre-save хуки для автоматического хеширования
Sequelize: хуки beforeCreate и beforeUpdate
Prisma: интеграция хеширования в слой сервисов
TypeORM: subscribers и entity listeners
Тестирование
Юнит-тестирование функций хеширования
Мокирование bcrypt в тестах: когда и зачем
Тестирование с реальными вызовами bcrypt и управление rounds
Интеграционные тесты аутентификации
Тестирование граничных случаев: пустые строки, спецсимволы, unicode
Проверка корректности хранения хешей в базе данных
Нагрузочное тестирование и влияние rounds на throughput
Производительность и масштабирование
Бенчмарки: сравнение rounds и времени выполнения
CPU-bound природа bcrypt и её последствия для сервера
Worker threads в Node.js как решение для CPU-bound задач
Вынесение хеширования в отдельный микросервис
Кеширование сессий как способ снизить нагрузку от bcrypt
Горизонтальное масштабирование и stateless-аутентификация
Очереди задач для асинхронного хеширования при высокой нагрузке
Безопасность
Атаки на реализацию: timing attacks и как bcrypt.compare защищает от них
Перехват пароля до хеширования: угрозы на транспортном уровне
Хеширование на клиенте: аргументы за и против
Pepper: добавление серверного секрета к паролю
Комбинирование bcrypt с HMAC
Защита от brute-force на уровне приложения
Rate limiting и account lockout в связке с bcrypt
Логирование и утечка чувствительных данных
Хранение cost factor вне хеша: смысл и риски
Реакция на компрометацию базы данных с хешами
Сравнение с альтернативами
Argon2: устройство, преимущества, когда предпочесть bcrypt
scrypt: параметры настройки и сравнение с bcrypt
PBKDF2: стандарт NIST и совместимость
SHA-256 и MD5 для паролей: почему это ошибка
Когда bcrypt — не лучший выбор
Продвинутые темы
Внутренняя реализация bcrypt.js: разбор исходного кода
Отличия bcrypt.js от нативного node.bcrypt.js под капотом
Работа с TypeScript: типы, интерфейсы, декораторы
Реализация собственного адаптера хеширования с заменяемым алгоритмом
Политики паролей в связке с валидацией до хеширования
Многофакторная аутентификация и роль хеширования паролей в ней
Хеширование данных, не являющихся паролями: токены, коды подтверждения