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: