Bcrypt, Hash Dan Autentication Sandi Di Node.js

Node.js Nov 14, 2022

Pada artikel ini, kita akan membahas cara melakukan hashing kata sandi menggunakan Node.js Bcrypt yang  disebut bcrypt.js.

Bcrypt adalah salah satu enkripsi libraries yang paling banyak digunakan saat ini. Ini menggabungkan enkripsi hash, yang memungkinkan Kamu untuk menentukan seberapa pentingnya fungsi hash (yaitu berapa lama waktu yang dibutuhkan untuk mendekripnya dengan tindakan brute force). Oleh karena itu ia mengikuti acuan yang disebut Moore's law, sehingga ketika komputer menjadi lebih cepat Kamu dapat meningkatkan faktor kerja dan hash akan menjadi lebih lambat Ketika dilakukan tindakan brute force.

Catatan: pastikan Kamu telah menginstal Node.js dan pengaturan direktori aplikasi sesuai dengan artikel kita kali ini.

Mari kita mulai

Sebelum itu, kita perlu menginstal paket bcrypt.js melalui NPM.

Kamu dapat menginstalnya dengan salah satu perintah di bawah ini:

NPM

npm install bcryptjs --save

YARN

yarn add bcryptjs

Setelah selesai menginstal, kita siap untuk bagian selanjutnya.

Hash Kata Sandi

Sekarang kita dapat melakukan hash kata sandi dan melihat bagaimana ini semua bekerja dalam praktiknya.

Berikut kode lengkapnya:

const bcrypt = require("bcryptjs")

const password = "mypass123"
const saltRounds = 10

bcrypt.genSalt(saltRounds, function (err, salt) {
  if (err) {
    throw err
  } else {
    bcrypt.hash(password, salt, function(err, hash) {
      if (err) {
        throw err
      } else {
        console.log(hash)
        //$2a$10$FEBywZh8u9M0Cec/0mWep.1kXrwKeiWDba6tdKvDfEBjyePJnDT7K
      }
    })
  }
})
Node.js

Penjelasan

Pertama, kita membuat dua variabel bernama password dan saltRounds.
Variabel password akan menjadi  hash string bcrypt.
Dan bilangan bulat saltRounds memberi kita kendali atas komputasi untuk memproses data. Semakin tinggi angkanya, semakin lama waktu yang dibutuhkan untuk menghitung hash yang terkait dengan kata sandi.

Jadi, kita ingin memilih angka yang keduanya cukup tinggi untuk membuat serangan brute force memakan waktu yang lama. 10 adalah nilai saltRounds default.

Kita kemudian melakukan dua hal secara berurutan untuk menghasilkan hash kita:

  1. membuat salt menggunakan bilangan bulat .
  2. Buat string hash untuk kata sandi kita "mypass123".

Kita menggunakan fungsi bcrypt.genSalt() untuk menghasilkan salt. Fungsi ini mengambil  bilangan bulat saltRounds kita dari 10 sebagai parameter dan mengembalikan fungsi callback dengan hasil salt yang dihasilkan.

Dan kita menggunakan fungsi bcrypt.hash() untuk menghasilkan hash. Dibutuhkan kata sandi "mypass123"  dan salt yang kita hasilkan sebagai parameter. Dalam fungsi callback, ini mengembalikan string hash yang dihasilkan untuk kata sandi kitadan Ketika di jalankan hasilnya akan seperti ini

$2a$10$FEBywZh8u9M0Cec/0mWep.1kXrwKeiWDba6tdKvDfEBjyePJnDT7K
Ini adalah string yang akan Kamu simpan di database Kamu alih-alih kata sandi dalam bentuk teks biasa.

Setelah berhasil membuat hashing password sesuai dengan apa yang kita inginkan sekarang kita akan sama-sama belajar Bagaimana cara kita melakukan pengecekan kata sandi yang user masukan terhadap hash ketika kita ingin mengautentikasi atau login.

Autentication Sandi

Sekarang setelah kita melakukan hashing kata sandi , kita memerlukan cara untuk membandingkannya dengan string yang dimasukkan oleh user dan melihat apakah itu cocok dengan kata sandi asli yang ada dalam database.

Bcrypt memiliki cara bawaan untuk melakukan ini.
Kode lengkap (pastikan Kamu mengganti YOUR_HASH_STRING dengan hash yang kita buat di bagian terakhir):

const bcrypt = require("bcryptjs")

const passwordEnteredByUser = "mypass123"
const hash = "YOUR_HASH_STRING"

bcrypt.compare(passwordEnteredByUser, hash, function(err, isMatch) {
  if (err) {
    throw err
  } else if (!isMatch) {
    console.log("Password doesn't match!")
  } else {
    console.log("Password matches!")
  }
})
Node.js

Selesai.