Salah satu cara terbaik untuk menyimpan kata sandi dengan aman adalah dengan salt dan hash. Salting dan hashing mengubah kata sandi biasa menjadi nilai unik yang sulit untuk dibalik. Pustaka bcrypt memungkinkan Anda hash dan garam kata sandi di Node.js dengan sedikit usaha.

Apa Itu Hashing Kata Sandi?

Hashing kata sandi berarti melewatkan kata sandi teks biasa melalui algoritma hashing untuk menghasilkan nilai unik. Beberapa contoh algoritma hashing adalah bcrypt, scrypt, dan SHA. Kelemahan dari hashing adalah dapat diprediksi.

Setiap kali Anda melewatkan input yang sama ke algoritma hashing, itu akan menghasilkan output yang sama. Seorang peretas dengan akses ke kata sandi hash dapat merekayasa balik enkripsi untuk mendapatkan kata sandi asli. Mereka mungkin menggunakan teknik seperti serangan brute force atau meja pelangi. Di sinilah pengasinan masuk.

Apa Itu Penggaraman Kata Sandi?

Penggaraman kata sandi menambahkan string acak (garam) ke kata sandi sebelum melakukan hashing. Dengan cara ini, hash yang dihasilkan akan selalu berbeda setiap saat. Bahkan jika seorang peretas mendapatkan kata sandi yang di-hash, tidak praktis bagi mereka untuk menemukan kata sandi asli yang membuatnya.

Cara Menggunakan bcrypt untuk Hash dan Memverifikasi Kata Sandi

bcrypt adalah modul npm yang menyederhanakan penggaraman dan hashing kata sandi.

Langkah 1: Instal bcrypt

Menggunakan npm:

npm Install bcrypt

Menggunakan benang:

benang tambahkan bcrypt

Langkah 2: Impor bcrypt

konstan bcrypt = memerlukan("bcrypt")

Langkah 3: Hasilkan Garam

Untuk menghasilkan garam, panggil bcrypt.genSalt() metode. Metode ini menerima nilai integer yang merupakan faktor biaya yang menentukan waktu yang dibutuhkan untuk hash kata sandi. Semakin tinggi faktor biaya, semakin banyak waktu yang dibutuhkan algoritma dan semakin sulit untuk membalikkan hash menggunakan brute force. Nilai yang baik harus cukup tinggi untuk mengamankan kata sandi tetapi juga cukup rendah untuk tidak memperlambat proses. Biasanya berkisar antara 5 dan 15. Dalam tutorial ini, kita akan menggunakan 10.

bcrypt.genSalt (10, (err, garam) => {
// menggunakangaramkehashkata sandi
})

Langkah 4: Hash Kata Sandi

Berikan kata sandi biasa dan garam yang dihasilkan ke hash() metode:

bcrypt.genSalt (10, (err, garam) => {
bcrypt.hash (plaintextPassword, salt, fungsi(salah, hash) {
// Simpan hash di database
});
})

Setelah Anda membuat hash, simpan di database. Anda akan menggunakannya untuk memverifikasi kata sandi dan mengautentikasi pengguna yang mencoba masuk.

Alih-alih menghasilkan garam dan hash secara terpisah, Anda juga dapat membuat garam dan hash secara otomatis menggunakan satu fungsi.

bcrypt.hash (plaintextPassword, 10, fungsi(salah, hash) {
// simpan hash di database
});

Langkah 5: Bandingkan Kata Sandi Menggunakan bcrypt

Ke mengautentikasi pengguna, Anda perlu membandingkan kata sandi yang mereka berikan dengan yang ada di database. bcrypt.bandingkan() menerima kata sandi teks biasa dan hash yang Anda simpan, bersama dengan fungsi panggilan balik. Panggilan balik itu memasok objek yang berisi kesalahan apa pun yang terjadi, dan hasil keseluruhan dari perbandingan. Jika kata sandi cocok dengan hash, hasilnya benar.

bcrypt.compare (plaintextPassword, hash, fungsi(salah, hasil) {
jika (hasil) {
// kata sandi valid
}
});

Menggunakan Async/Menunggu

Anda dapat hash dan memverifikasi kata sandi menggunakan async/menunggu sebagai berikut.

tidak sinkronfungsihashPassword(plaintextPassword) {
konstan hash = menunggu bcrypt.hash (plaintextPassword, 10);
// Simpan hash di database
}

// bandingkan kata sandi
tidak sinkronfungsibandingkanKata Sandi(plaintextPassword, hash) {
konstan hasil = menunggu bcrypt.compare (plaintextPassword, hash);
kembali hasil;
}

Menggunakan Janji

Pustaka bcrypt juga mendukung penggunaan janji.

fungsihashPassword(plaintextPassword) {
bcrypt.hash(plaintextPassword, 10)
.then (hash => {
// Simpan hash di database
})
.menangkap(keliru => {
menghibur.log (err)
})
}

fungsibandingkanKata Sandi(plaintextPassword, hash) {
bcyrpt.membandingkan(plaintextPassword, hash)
.kemudian (hasil => {
kembali hasil
})
.menangkap(keliru => {
menghibur.log (err)
})
}

Hashing dan Salting Adalah Kemenangan Mudah

Anda dapat menggunakan perpustakaan bcrypt untuk hash dan verifikasi kata sandi di Node.js. Hashing kata sandi meminimalkan kemungkinan penjahat dunia maya menggunakannya untuk mengakses data atau layanan sensitif. Pengasinan kata sandi hash Anda membuatnya lebih aman. Selain hashing, selalu validasi kekuatan kata sandi sebagai langkah keamanan tambahan.

8 Trik Paling Umum Digunakan untuk Meretas Kata Sandi

Baca Selanjutnya

MembagikanMenciakMembagikanSurel

Topik-topik yang berkaitan

  • Pemrograman
  • Keamanan
  • Pemrograman
  • JavaScript
  • Keamanan
  • algoritma

Tentang Penulis

Mary Gathoni (21 Artikel Diterbitkan)

Mary Gathoni adalah pengembang perangkat lunak dengan hasrat untuk membuat konten teknis yang tidak hanya informatif tetapi juga menarik. Ketika dia tidak coding atau menulis, dia senang bergaul dengan teman-teman dan berada di luar ruangan.

More From Mary Gathoni

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan