Коротка відповідь
middleПароль хешується за допомогою bcrypt, а збережений hash порівнюється із новим хешем введеного паролю. Якщо обидва hash збігаються, пароль вважається правильним.
Повне пояснення
Що це і навіщо
Bcrypt – криптографічний алгоритм хешування, що включає соль і кількість раундів (cost). Він використовується для безпечного зберігання паролів у базах даних.
Ключові принципи
- Соль (salt) додається до паролю, що унеможливлює атаки по словнику.
- Cost визначає кількість раундів, що збільшує час хешування і ускладнює brute‑force.
- Порівняння виконується за допомогою
bcrypt.compare().
Як це працює
- Користувач вводить пароль.
bcrypt.hash()генерує новий hash з солью і cost‑фактором.bcrypt.compare()приймає введений пароль та збережений hash, генерує новий hash і порівнює їх.- Якщо хеші збігаються – пароль правильний, інакше – ні.
Практика та реалізація (Node.js/TypeScript)
import bcrypt from 'bcrypt';
const saltRounds = 12;
// Хешування
const hash = await bcrypt.hash('userPassword', saltRounds);
// Перевірка
const isMatch = await bcrypt.compare('userPassword', hash); // true
Тестування
import { describe, it, expect } from 'vitest';
import bcrypt from 'bcrypt';
describe('bcrypt password check', () => {
it('should validate correct password', async () => {
const hash = await bcrypt.hash('secret', 10);
expect(await bcrypt.compare('secret', hash)).toBe(true);
});
});
Безпека
- Не зберігайте пароль у відкритому вигляді.
- Вибирайте cost ≥ 10 для сучасних CPU, але враховуйте час хешування.
- Використовуйте
bcrypt.compare()замість ручного порівняння, щоб уникнути timing‑attack.
Поради для співбесіди
- Поясніть, чому bcrypt краще за прості SHA‑256.
- Згадайте про
bcryptjsдля браузерних застосунків. - Підкресліть важливість налаштування cost‑фактора відповідно до ресурсів сервера.