Рубрики
Без рубрики

Как использовать библиотеку JavaScript bcrypt

Узнайте, как хэшировать и проверять пароли в JavaScript с помощью библиотеки bcrypt

Пакет bcrypt npm является одним из наиболее часто используемых пакетов для работы с паролями в JavaScript.

Это безопасность 101, но стоит упомянуть для новых разработчиков: вы никогда не храните пароль в виде простого текста в базе данных или в любом другом месте. Ты просто не понимаешь.

Вместо этого вы создаете хэш из пароля и сохраняете его.

Таким образом:

import bcrypt from 'bcrypt'
// or
// const bcrypt = require('bcrypt')

const password = 'oe3im3io2r3o2'
const rounds = 10

bcrypt.hash(password, rounds, (err, hash) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(hash)
})

Вы передаете число в качестве второго аргумента, и чем оно больше, тем безопаснее хэш. Но также и тем больше времени потребуется для его создания.

Библиотека README сообщает нам, что на ядре 2 ГГц мы можем генерировать:

rounds=8 : ~40 hashes/sec
rounds=9 : ~20 hashes/sec
rounds=10: ~10 hashes/sec
rounds=11: ~5  hashes/sec
rounds=12: 2-3 hashes/sec
rounds=13: ~1 sec/hash
rounds=14: ~1.5 sec/hash
rounds=15: ~3 sec/hash
rounds=25: ~1 hour/hash
rounds=31: 2-3 days/hash

Если вы запустите bcrypt.hash() несколько раз, результат будет постоянно меняться. Это важно, потому что невозможно восстановить исходный пароль по хэшу.

Учитывая тот же пароль и хэш, можно узнать, был ли хэш создан на основе этого пароля, используя функцию bcrypt.compare() :

bcrypt.compare(password, hash, (err, res) => {
  if (err) {
    console.error(err)
    return
  }
  console.log(res) //true or false
})

Если это так, то пароль соответствует хэшу, и, например, мы можем разрешить пользователю успешно войти в систему.

Вы также можете использовать библиотеку bcrypt с ее API на основе обещаний вместо обратных вызовов:

const hashPassword = async () => {
  const hash = await bcrypt.hash(password, rounds)
  console.log(hash)
  console.log(await bcrypt.compare(password, hash))
}

hashPassword()

Проверьте пару примеров в этом глюке :

Оригинал: “https://flaviocopes.com/javascript-bcrypt/”