# Не используйте криптографическую библиотеку Node.js для паролей, используйте Bcrypt ### Объяснение в один абзац При хранении паролей пользователей рекомендуется использовать адаптивный алгоритм хеширования, такой как bcrypt, предлагаемый [bcrypt npm module](https://www.npmjs.com/package/bcrypt), а не использовать собственный криптографический модуль Node.js. , `Math.random()` также никогда не следует использовать как часть генерации пароля или токена из-за его предсказуемости. Модуль `bcrypt` или аналогичный ему следует использовать в отличие от реализации JavaScript, так как при использовании `bcrypt` можно указать несколько "раундов" для обеспечения безопасного хэша. Это устанавливает коэффициент работы или количество "раундов", для которых обрабатываются данные, и большее количество циклов хеширования приводит к более безопасному хэшированию (хотя это и происходит за счет процессорного времени). Введение циклов хеширования означает, что коэффициент грубой силы значительно уменьшается, поскольку взломщики паролей замедляются, увеличивая время, необходимое для генерации одной попытки. ### Пример кода ```javascript try { // asynchronously generate a secure password using 10 hashing rounds const hash = await bcrypt.hash('myPassword', 10); // Store secure hash in user record // compare a provided password input with saved hash const match = await bcrypt.compare('somePassword', hash); if (match) { // Passwords match } else { // Passwords don't match } } catch { logger.error('could not hash password.') } ``` ### Что говорят другие блогеры Из блога [Max McCarty](https://dzone.com/articles/nodejs-and-password-storage-with-bcrypt): > ... это не просто использование правильного алгоритма хеширования. Я много говорил о том, что правильный инструмент также включает в себя необходимый компонент "время" как часть алгоритма хеширования паролей и что это значит для злоумышленника, который пытается взломать пароли с помощью грубой силы.