Pendahuluan
Dalam pengembangan aplikasi, menyimpan password secara langsung (plain text) sangat tidak disarankan karena berisiko tinggi terhadap keamanan data pengguna. Salah satu cara untuk mengamankan password adalah dengan melakukan hashing menggunakan algoritma yang kuat, seperti bcrypt. Pada bahasa pemrograman Go, kita dapat menggunakan library golang.org/x/crypto/bcrypt untuk melakukan hashing password.
Instalasi Library
Untuk menggunakan bcrypt di Go, install terlebih dahulu library-nya dengan perintah berikut:
go get golang.org/x/crypto/bcrypt
Perintah ini akan menambahkan dependensi bcrypt ke dalam project Go Anda.
Contoh Implementasi
Berikut contoh kode sederhana untuk melakukan hashing dan verifikasi password menggunakan bcrypt di Go:
// main.go
package main
import (
"fmt"
"golang.org/x/crypto/bcrypt"
)
// Fungsi untuk melakukan hashing password
func HashPassword(password string) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
return string(bytes), err
}
// Fungsi untuk memverifikasi password dengan hash-nya
func CheckPasswordHash(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
func main() {
password := "secret"
hash, err := HashPassword(password)
if err != nil {
fmt.Println("Error hashing password:", err)
return
}
fmt.Println("Password:", password)
fmt.Println("Hash: ", hash)
match := CheckPasswordHash(password, hash)
fmt.Println("Match: ", match)
// Contoh verifikasi dengan password yang salah
wrongPassword := "wrongpassword"
matchWrong := CheckPasswordHash(wrongPassword, hash)
fmt.Println("Match with wrong password:", matchWrong)
}
Penjelasan Kode
Fungsi HashPassword
func HashPassword(password string) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
return string(bytes), err
}
Fungsi HashPassword()
menerima parameter berupa string password, kemudian menghasilkan hash bcrypt dengan cost 14. Nilai cost menentukan tingkat keamanan dan kecepatan hashing (semakin tinggi, semakin aman namun lebih lambat).
Fungsi CheckPasswordHash
func CheckPasswordHash(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
Fungsi CheckPasswordHash()
digunakan untuk membandingkan password plain text dengan hash bcrypt yang sudah tersimpan. Fungsi ini akan mengembalikan nilai true
jika password cocok, dan false
jika tidak cocok.
Contoh Output
Jika dijalankan, hasilnya akan seperti berikut:
$ go run main.go
Password: secret
Hash: $2a$14$ajq8Q7fbtFRQvXpdCq7Jcuy.Rx1h/L4J60OtxgyNLbAYctGMJ9tK
Match: true
Match with wrong password: false
Match: true
menandakan password cocok dengan hash.Match with wrong password: false
menandakan password salah tidak cocok dengan hash.
Kesimpulan
Dengan menggunakan bcrypt di Go, Anda dapat mengamankan password pengguna dengan mudah dan aman. Selalu gunakan hashing untuk menyimpan password, dan jangan pernah menyimpan password dalam bentuk plain text.
Referensi: