> For the complete documentation index, see [llms.txt](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/autentifikaciya-and-avtorizaciya/kheshirovanie-parolei-s-bcrypt.md).

# Хеширование паролей с bcrypt

Одним из самых простых решений для хеширования паролей в nodejs есть библиотека [bcryptjs](https://www.npmjs.com/package/bcryptjs).&#x20;

Для того, чтобы создать хэш пароля, достаточно просто вызвать метод `bcryptjs.hash`:

```
const plainPassword = 'пароль полученный от пользователя';
const costFactor = 6; // насколько безопасно и долго будет проходить операция
                      // хеширования и операция сравнения хешей
                      
// bcryptjs.hash - асинхронная функция, что возвращает промис
// после завершения, промис возвращает хеш пароля
const passwordHash = await bcryptjs.hash(plainPassword, costFactor);
```

{% hint style="info" %}
Стоит заметить, что в результате выполнения `bcryptjs.hash` входит соль, которая использовалась для хеширования. Поэтому следующая функция (`bcryptjs.compare`) не требует передачи соли для сравнения пароля с имеющимся хешом.
{% endhint %}

Для того, чтобы сравнить пароль, полученный от пользователя, и хэш пароля из базы данных, используется метод `bcryptjs.compare`:

```
const receivedPassword = 'пароль полученный от пользователя';

// passwordHash с предыдущего примера
// bcryptjs.compare - асинхронная функция, что возвращает промис

// после завершения, промис возвращает true, если пароль соответствует хешу
// и false - если нет
const isRightPassword = await bcryptjs.compare(receivedPassword, passwordHash)
```
