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
Topik-topik yang berkaitan
- Pemrograman
- Keamanan
- Pemrograman
- JavaScript
- Keamanan
- algoritma
Tentang Penulis
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.
Berlangganan newsletter kami
Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!
Klik di sini untuk berlangganan