Skip to content Skip to sidebar Skip to footer

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"