Penggunaan fungsi HASHFILE di PHP

Kata sandi dapat diibaratkan sebagai kunci rumah yang digunakan untuk membuka pintu rumah agar dapat mengakses kamar dan barang berharga yang ada di dalam rumah. Password merupakan hal yang sangat vital yang dibutuhkan untuk mengamankan suatu sistem dari upaya pihak luar yang bermaksud untuk mengakses berbagai informasi berharga yang ada pada sistem tersebut. Password pada suatu sistem selalu dimiliki oleh pihak yang memiliki otoritas atau kewenangan atas sistem tersebut

Kata sandi tidak boleh jatuh ke tangan pihak yang tidak berwenang. Nilai sebuah password sangatlah berharga, sehingga banyak pihak yang tidak memiliki kewenangan, ingin mengetahui isi dari password tersebut. Tentu saja tujuannya hanya untuk membuka dan menguasai sistem yang ada

Enkripsi Hashing

Kata sandi idealnya tidak boleh didekripsi atau dikembalikan ke teks asli sebelum proses enkripsi. Metode ini dikenal dengan Hashing Encryption dengan melakukan enkripsi satu arah (one-way hashing). Hashing Encryption akan membuat password yang telah dienkripsi tidak dapat lagi didekripsi atau dikembalikan

Hashing pada teks dapat disamakan dengan sidik jari manusia. Kelompok teks jika diamati secara visual mulai dari susunan huruf, spasi dan juga tata letaknya akan memiliki susunan dan pola yang unik. Satu teks dengan teks lainnya jika isinya berbeda, akan memiliki pola visual yang berbeda. Pola ini disebut hashing

Teknik hashing dapat digunakan untuk membandingkan keaslian suatu data atau file. Caranya adalah dengan membandingkan nilai hash dari data atau file sebelum dan sesudah dibandingkan

1
2
3
4
5
6
7
8
/*user's password */
$password = "My secret password";
/*md5 hashing */
$hash = md5($password);
echo $hash;
// hasil hashing = 0bf1334ac2aa41ae8de0f705188c1850
?>

Enkripsi kata sandi dengan password_hash()

Metode enkripsi password yang umum biasanya menggunakan MD5 (Message Digest Algorithm) atau SHA (Secure Hash Algorithm) dengan berbagai varian hash seperti SHA1, SHA256, SHA380, atau SHA512. Namun, kedua sistem enkripsi tersebut masih memiliki berbagai kelemahan dan sangat tidak aman untuk digunakan. Dan baru-baru ini jarang digunakan untuk mengenkripsi data sensitif

Mengenkripsi kata sandi dengan password_hash() akan jauh lebih aman dimana password_hash akan membuat garam acak untuk menghasilkan nilai keluaran yang berbeda. Jika sebuah password dienkripsi berulang kali dengan password_hash() akan menghasilkan nilai yang berbeda walaupun isi passwordnya sama

Misalnya, kata sandi dieksekusi dengan mengulang 10 kali

1
2
3
4
5
6
7
8
9
/*user's password */
$password = "My secret password";
/* hashing */
for($x=1; $x<=10; $x++){
   $hash = password_hash($password, PASSWORD_DEFAULT);
   echo "Hash ke-" . $x . " = " . $hash . "
";
}
?>

Akan menghasilkan nilai output hash yang berbeda

Penggunaan fungsi HASHFILE di PHP

Parameter Fungsi password_hash()

Fungsi password_hash() adalah fungsi yang ditambahkan sejak versi php5, php7 dan php8. Fungsi ini digunakan untuk membuat kata sandi yang telah diubah menjadi hash. Output dari password_hash() akan menghasilkan string dengan panjang karakter 60 digit

1
password_hash(string $password, string|int|null $algorithm,array $option=[]);

  1. Parameter pertama berupa $password (string), merupakan password yang akan diproses dalam enkripsi ini
  2. Parameter ke-2 adalah jenis algoritma yang digunakan dalam proses hashing
    • PASSWORD_DEFAULT
    • PASSWORD_BCRYPT
    • PASSWORD_ARGON2I
    • PASSWORD_ARGON2ID
  3. Parameter ke 3 adalah pilihan berupa nilai salt yang ditambahkan secara manual jika algoritma yang digunakan adalah PASSWORD_BCRYPT

Pencocokan Nilai Kata Sandi Dengan password_verify()

Proses pencocokan kata sandi dilakukan dengan membandingkan nilai kata sandi yang dimasukkan dengan nilai kata sandi yang telah di-hash oleh fungsi password_hash(). Password hash biasanya disimpan di database dan digunakan sebagai pembanding dengan password yang akan dimasukkan oleh user

Untuk melakukan pencocokan data, fungsi password_verify() digunakan.

1
password_verify($password, $hashed_password);

Misalnya password yang digunakan adalah "My secret password". Maka password yang sebelumnya sudah di hash oleh password_hash() adalah "$2y$10$5IGWkFkhT5uNo3I1yscIh. pa4K4ZQi8GcHYT1VBfPE458lFUJIOA. ". Kemudian dilakukan pengujian dengan password_verify(), kemudian akan menghasilkan nilai yang cocok (boolean TRUE)

1
2
3
4
5
6
7
8
9
$password = "My secret password";
$hashed_password = "$2y$10$5IGWkFkhT5uNo3I1yscIh.pa4K4ZQi8GcHYT1VBfPE458lFUJIOA.";
if(password_verify($password, $hashed_password)){
   echo "Password match..";
}else{
   echo "Password mismatch..";
}
?>

Fungsi password_verify() akan mengembalikan nilai boolean BENAR dan SALAH. Jika nilainya TRUE, berarti data yang dicocokkan sesuai, jika SALAH maka data tidak sesuai. Fungsi password_verify() hanya akan berfungsi, jika hash yang dihasilkan berasal dari password_hash(). Jika berasal dari fungsi lain seperti MD5, SHA dan lainnya tentu saja tidak akan berhasil