Tentu, berikut adalah artikel mengenai tutorial hashing di Laravel.
Setelah membahas sistem login, register, dan reset password, kini saatnya kita masuk ke salah satu aspek terpenting di baliknya: hashing. Hashing adalah teknik keamanan fundamental yang digunakan untuk menyimpan password pengguna dengan aman. Laravel, dengan pendekatannya yang berfokus pada keamanan, membuat proses ini menjadi sangat mudah dan otomatis.
Pada tutorial ini, kita akan memahami apa itu hashing, perbedaannya dengan enkripsi, dan bagaimana cara menggunakan facade Hash di Laravel untuk mengamankan data.
1. Apa itu Hashing dan Mengapa Berbeda dari Enkripsi?
Banyak orang menyamakan hashing dengan enkripsi, padahal keduanya memiliki tujuan yang sangat berbeda.
- Enkripsi adalah proses dua arah. Kamu mengenkripsi data (plaintext) menjadi kode rahasia (ciphertext) dan bisa mendekripsinya kembali menjadi data asli menggunakan sebuah kunci.
- Hashing adalah proses satu arah. Kamu mengubah data (plaintext) menjadi string acak dengan panjang tetap (hash). Proses ini tidak bisa dibalik. Kamu tidak bisa mendapatkan kembali data asli dari hash.
Bayangkan hashing seperti sidik jari digital untuk password. Setiap password memiliki “sidik jari” yang unik, tetapi dari sidik jari tersebut, kamu tidak bisa merekonstruksi password aslinya. Inilah mengapa hashing sangat ideal untuk menyimpan password: kita tidak perlu tahu password pengguna, kita hanya perlu memverifikasi apakah password yang mereka masukkan cocok dengan hash yang tersimpan.
Laravel menggunakan algoritma bcrypt secara default untuk hashing, yang dianggap sebagai salah satu algoritma hashing terkuat dan teraman saat ini.
2. Menggunakan Facade Hash di Laravel
Laravel menyediakan facade Hash yang mudah digunakan untuk membuat dan memverifikasi hash. Kamu bisa menggunakan ini untuk keperluan hashing di luar sistem autentikasi bawaan Laravel.
A. Membuat Hash dengan Hash::make()
Untuk membuat hash dari sebuah string, gunakan metode make(). Perhatikan bahwa setiap kali kamu menjalankan metode ini, ia akan menghasilkan string yang berbeda meskipun inputnya sama. Ini karena algoritma bcrypt menyertakan “salt” (nilai acak) untuk mencegah serangan kamus.
PHP
use Illuminate\Support\Facades\Hash;
$password = "password123";
$hashedPassword = Hash::make($password);
// Contoh hasil yang akan dihasilkan:
// $2y$10$wK1F5wN2N5f0Q.H6S8tT2O...
B. Memverifikasi Password dengan Hash::check()
Metode check() adalah kebalikan dari make(). Metode ini akan membandingkan sebuah string (plaintext yang dimasukkan pengguna) dengan hash yang sudah ada di database. Metode ini mengembalikan nilai boolean (true atau false).
PHP
use Illuminate\Support\Facades\Hash;
$passwordYangDimasukkan = "password123";
$hashedPasswordDiDatabase = '$2y$10$wK1F5wN2N5f0Q.H6S8tT2O...'; // Hash yang tersimpan di DB
if (Hash::check($passwordYangDimasukkan, $hashedPasswordDiDatabase)) {
// Password cocok
echo "Password cocok!";
} else {
// Password tidak cocok
echo "Password tidak cocok!";
}
3. Hashing Otomatis pada Sistem Autentikasi
Poin penting yang perlu kamu ketahui adalah bahwa kamu tidak perlu melakukan hashing secara manual untuk password pengguna jika kamu menggunakan sistem autentikasi bawaan Laravel seperti Laravel Breeze atau Jetstream.
Secara default, Laravel akan secara otomatis mengenkripsi password saat pengguna mendaftar atau saat kamu mengaturnya secara langsung pada model User.
Contohnya, di RegisteredUserController yang dibuat oleh Laravel Breeze, kode untuk membuat pengguna baru terlihat sederhana:
PHP
// app/Http/Controllers/Auth/RegisteredUserController.php
public function store(Request $request): RedirectResponse
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password), // Hashing terjadi di sini!
]);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
Seperti yang bisa kamu lihat, metode Hash::make() dipanggil secara eksplisit untuk mengenkripsi password sebelum disimpan. Begitu juga, saat pengguna login, Laravel akan menggunakan Hash::check() secara otomatis di balik layar untuk memverifikasi password yang dimasukkan.
4. Kesimpulan
Hashing adalah kunci utama keamanan password di aplikasi web. Dengan menyediakan facade Hash yang kuat dan otomatis mengintegrasikannya ke dalam sistem autentikasi, Laravel memastikan bahwa data sensitif pengguna kamu terlindungi tanpa harus kamu menulis kode keamanan yang kompleks. Selalu pastikan untuk tidak pernah menyimpan password dalam format teks biasa di database.
Dengan pemahaman ini, kamu telah menambah satu lagi keterampilan penting dalam membangun aplikasi yang aman.