bcryptjs - это библиотека для хеширования паролей в JavaScript. Она предоставляет простой интерфейс для хеширования и сравнения паролей с использованием алгоритма bcrypt.
Вот примеры кода, демонстрирующие использование bcryptjs:
1. Установка библиотеки:
npm install bcryptjs
yarn add bcryptjs
pnpm install bcryptjs
2. Хеширование пароля:
const bcrypt = require('bcryptjs');
const password = 'myPassword123';
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(password, salt, (err, hash) => {
if (err) throw err;
// сохраните хеш в базу данных или в другое безопасное место
console.log(hash);
});
});
3. Сравнение пароля с хешем:
const bcrypt = require('bcryptjs');
const password = 'myPassword123';
const hash = '$2a$10$BqS1SbY1Ua0s3V6s2Y4K1e1lGdX2uZs7p6D5f4G3A2K1K5j1v0q2S';
bcrypt.compare(password, hash, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
console.log('Пароль совпадает!');
} else {
console.log('Пароль не совпадает!');
}
});
В примере выше genSalt генерирует случайную соль с указанной стоимостью (10), а hash использует соль для создания хеша пароля. Затем compare сравнивает введенный пароль с хешем и возвращает результат совпадения.
Библиотека bcryptjs обеспечивает безопасное хеширование паролей, используя соль и сложные алгоритмы хеширования. Это помогает защитить пользовательские пароли от несанкционированного доступа.
Вот еще некоторые дополнительные сведения о библиотеке bcryptjs:
1. Стоимость (cost factor):
В примере выше мы использовали стоимость 10 при генерации соли. Стоимость обозначает количество итераций, которые будут выполнены для вычисления хеша. Чем выше стоимость, тем дольше будет занимать процесс хеширования. Это делает атаки методом перебора более затратными и медленными. Обычно рекомендуется использовать стоимость от 10 до 12.
2. Асинхронные функции:
В примерах мы использовали колбэки для обработки результатов хеширования и сравнения паролей. Однако bcryptjs также предоставляет асинхронные функции, которые могут быть использованы с помощью async/await или Promise. Например:
Хеширование пароля (асинхронный вариант)
const hashPassword = async (password) => {
try {
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(password, salt);
// сохраните хеш в базу данных или в другое безопасное место
console.log(hash);
} catch (err) {
console.error(err);
}
};
Сравнение пароля с хешем (асинхронный вариант)
const comparePassword = async (password, hash) => {
try {
const isMatch = await bcrypt.compare(password, hash);
if (isMatch) {
console.log('Пароль совпадает!');
} else {
console.log('Пароль не совпадает!');
}
} catch (err) {
console.error(err);
}
};
// Использование асинхронных функций
const password = 'myPassword123';
const hash = '$2a$10$BqS1SbY1Ua0s3V6s2Y4K1e1lGdX2uZs7p6D5f4G3A2K1K5j1v0q2S';
hashPassword(password);
comparePassword(password, hash);
3. Дополнительные функции:
bcryptjs также предоставляет другие полезные функции, такие как getRounds, которая возвращает количество раундов, использованных для создания хеша, и hashSync / compareSync, которые предоставляют синхронные аналоги асинхронных функций.
В целом, bcryptjs является удобной и надежной библиотекой для хеширования паролей в JavaScript. Она обеспечивает безопасность путем добавления соли и использованием медленных алгоритмов хеширования.