Contoh Hashing UnHashing Password
Hello semuanya, kali ini saya ingin membagikan sedikit contoh membuat hashing unhashing dengan bahasa pemograman PHP 8, perlu di ketahui bahwa hashing ini terikat dengan penggunaan CPU yang ada di laptop atau pc sobat, tujuan saya membagikan ini hanya untuk pembelajaran saja dan arsip untuk pribadi sewaktu waktu jika lupa, mari kita bahas satu persatu perihal spesifik Bcrypt, Argon2, Argon2id di bawah ini :
Bcrypt spesifik
bcrypt_default_cost
: Ini menentukan seberapa kuat enkripsi nantinya.Namun, semakin tinggi biayanya, semakin lama waktu yang dibutuhkan untuk hash (penggunaan CPU) Jadi sesuaikan ini berdasarkan perangkat keras server Anda,
Anda dapat membandingkan server Anda. Ini dapat dilakukan dengan mudah dengan skrip kecil ini: https://gist.github.com/Indigo744/24062e07477e937a279bc97b378c3402
Dengan bcrypt, contoh hash dari "password" adalah :
$2y$08$200Z6ZZbp3RAEXoaWcMA6uJOFicwNZaqk4oDhqTUiFXFe63MG.Daa
Argon2 spesifik
argon2_default_params
: Ini adalah larik yang berisi opsi untuk algoritme Argon2
Anda dapat menentukan 3 kunci atau parameter berbeda :
memory_cost
: (default 4096 kB) Memori maksimum (dalam kBytes) yang dapat digunakan untuk menghitung hash Argon2, Spesifikasi merekomendasikan pengaturan biaya memori ke pangkat 2.
time_cost
: (default 2) Jumlah iterasi (digunakan untuk menyetel waktu berjalan secara terpisah dari ukuran memori). Ini menentukan seberapa kuat enkripsi nantinya.
threads
: (default 2) Jumlah utas yang digunakan untuk menghitung hash Argon2, Spesifikasi merekomendasikan pengaturan jumlah utas menjadi kekuatan 2.
Anda dapat membandingkan server Anda. Ini dapat dilakukan dengan mudah dengan skrip kecil ini: https://gist.github.com/Indigo744/e92356282eb808b94d08d9cc6e37884c
Dengan argon2, contoh hash dari "password" adalah:
$argon2i$v=19$m=1024,t=2,p=2$VEFSSU4wSzh3cllVdE1JZQ$PDeks/7JoKekQrJa9HlfkXIk8dAeZXOzUxLBwNFbZ44
Argon2id spesifik
Ini hampir mirip dengan Argon2, selebihnya bisa check disini untuk informasi selengkapnya http://php.net/manual/en/function.password-hash.php
Implementasi
sekarang mari kita coba bagaimana implementasi ke dalam bahasa pemograman PHP dibawah ini :simpan ini di webroot dengan nama
index.php
/** * Fungsi hashing * * @param string $password * @param string $method * * @return string */ function hashing($password = null, $method = false) { // default method $method = $method == false ? 'bcrypt' : $method; // case switch ($method) { case 'bcrypt': $algo = PASSWORD_BCRYPT; $params = [ 'cost' => defined('PASSWORD_BCRYPT_DEFAULT_COST') ? PASSWORD_BCRYPT_DEFAULT_COST : 10 ]; $hash = password_hash($password, $algo, $params); break; case 'argon2': $algo = PASSWORD_ARGON2I; $params = [ 'memory_cost' => defined('PASSWORD_ARGON2_DEFAULT_MEMORY_COST') ? PASSWORD_ARGON2_DEFAULT_MEMORY_COST : 1 << 12, 'time_cost' => defined('PASSWORD_ARGON2_DEFAULT_TIME_COST') ? PASSWORD_ARGON2_DEFAULT_TIME_COST : 2, 'threads' => defined('PASSWORD_ARGON2_DEFAULT_THREADS') ? PASSWORD_ARGON2_DEFAULT_THREADS : 2 ]; $hash = password_hash($password, $algo, $params); break; case 'argon2id': $algo = PASSWORD_ARGON2ID; $params = [ 'memory_cost' => defined('PASSWORD_ARGON2_DEFAULT_MEMORY_COST') ? PASSWORD_ARGON2_DEFAULT_MEMORY_COST : 1 << 12, 'time_cost' => defined('PASSWORD_ARGON2_DEFAULT_TIME_COST') ? PASSWORD_ARGON2_DEFAULT_TIME_COST : 2, 'threads' => defined('PASSWORD_ARGON2_DEFAULT_THREADS') ? PASSWORD_ARGON2_DEFAULT_THREADS : 2 ]; $hash = password_hash($password, $algo, $params); break; default: $algo = PASSWORD_BCRYPT; $params = [ 'cost' => defined('PASSWORD_BCRYPT_DEFAULT_COST') ? PASSWORD_BCRYPT_DEFAULT_COST : 10 ]; $hash = password_hash($password, $algo, $params); break; } return $hash; } /** * Fungsi ini mengambil kata sandi dan memvalidasinya * * @param string $password * @param string $hash_password_db * * @return bool */ function unhashing($password, $hash_password_db) { // Periksa id atau kata sandi kosong, atau kata sandi berisi karakter nol, atau kata sandi di atas batas // Null char dapat menimbulkan masalah: http://php.net/manual/en/function.password-hash.php#118603 // Kata sandi yang panjang dapat menimbulkan masalah DOS (catatan: strlen memberikan ukuran dalam byte dan bukan dalam simbol multibyte) if (empty($password) || empty($hash_password_db) || strpos($password, "\0") !== FALSE || strlen($password) > 4096) { return FALSE; } // password_hash always starts with $ if (strpos($hash_password_db, '$') === 0) { return password_verify($password, $hash_password_db); } else { return false; } } // example $input_password = 'myexample123'; $method_hashing = 'argon2'; // argon2 / argon2id /bycrypt $hashing = hashing($input_password, $method_hashing); echo 'HASHING'; echo '
'; echo 'Input Password : ' . $input_password; echo '
'; echo 'Method : ' . $method_hashing; echo '
'; echo '
'; echo 'Ouput Hashing : ' . $hashing; echo '
'; echo '
'; echo '---------------------------------------'; echo '
'; echo '
'; echo 'UNHASHING TRUE'; echo '
'; echo 'Input Password : ' . $input_password; echo '
'; echo 'Method : ' . $method_hashing; echo '
'; echo '
'; echo 'Ouput UnHashing : ' . unhashing($input_password, $hashing); echo '
'; echo '
'; echo '---------------------------------------'; echo '
'; echo '
'; $input_password = 'myexample12'; $unhashing = unhashing($input_password, $hashing); echo 'UNHASHING FALSE'; echo '
'; echo 'Input Password : ' . $input_password; echo '
'; echo 'Method : ' . $method_hashing; echo '
'; echo '
'; echo 'Ouput UnHashing : ' . $unhashing; if($unhashing == '') { echo 0; }
Setelah itu, tinggal jalankankan saja nanti hasilnya seperti ini :
Itulah sedikit tulisan saya, semoga bisa bermanfaat, dan jangan lupa untuk dibagikan ya..., terima kasih telah berkunjung dan selamat mencoba
Post a Comment for "Contoh Hashing UnHashing Password"