كيفية استخدام مكتبة 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

If you run bcrypt.hash() multiple times, the result will keep changing. This is key because there is no way to reconstruct the original password from a hash.

Given the same password and a hash it’s possible to find out if the hash was built from that password, using the bcrypt.compare() function:

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

If so, the password matches the hash and for example we can let a user log in successfully.

You can use the bcrypt library with its promise-based API too, instead of callbacks:

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

hashPassword()

Check a couple examples in this Glitch:


More js tutorials: