Kufanya hashing

Moja katika somo muhimu kwa ajili ya usalama wa kazi yako ni hii ya kutumia hashing. Chukulia mfano password yako ni admin123 sas akule kwenye database hii password ni hatari kama itaonekana hivihivi. Hivyo basi tunatakiwa kubadili kuwa hatika namna tofauti ili mtu asiweze kuijuwa hata kama ikitokea amehack database. Kwa mfano passowr hivyo kwenye database inaweza kuwa hivi 0192023a7bbd73250516f069df18b500

 

Je hii ni njia sahihi kiusalama?

Jibu ndio, mpaka sasa hakujatokea teknolojia ya kuweza kuijuwa password ambayo imefanhyiwa hashing. Hata hivyo zipo software hutumiwa ili kuweza kuges password. Pia endapo mtu ataipata hiyo hash anaweza kutumia vifaa mbalimbali kuweza kupata password ambayo itafanana na hiyo na kweza ku login.

Password ikiwa hashed haiwezi kurudishwa tena katika hali ya kawaida. Ndio maana hii ni njia salama zaidi kuliko encryption ama kuwacha password kuwa plain text. Kuna function kadhaa za kufanya hashing ambazo ni md5(), sha1() na hash() na password_hash().

 

  1. Kwa kutumia md5()

$password = "admin123";

$hasshed_password = md5($password);

echo $hasshed_password;

?>

Hii itakupa matokeo 0192023a7bbd73250516f069df18b500

 

  1. Kwa kutumia sha1()

$password = "admin123";

$hasshed_password = sha1($password);

echo $hasshed_password;

?>

Hii itakupa matokea f865b53623b121fd34ee5426c792e5c33af8c227

 

  1. Kwa kutumia hash()

Hii ina utofauti kidogo, yenyewe ina parameter 2 za lazima kwanza ni gost au gost-crypto, na ya pili ni password yako.

$password = "admin123";

$hasshed_password = hash('gost',$password);

echo $hasshed_password;

?>

Hii itakupa matokeao 6fea3e5f10dff1f2f6be984728d8b9ae84ecc0412024ce8e55b4c22970268801

 

Katika njia 3 hizo nilizotaja hapo hiyo ya mwisho ni salama zaidi. Hata hivyo kuna namna ya kuzifanya hizo za pili lkuwa salama zaidi. Ni kwa kutumia neno la siri jingine ambayo itatumiaka kwenye kutengeneza password. Kwa mfano tunaweza kutumia neno myall@pass# 1+)lkhd sasa hili neno litatusaidia katika kutengeneza hash ambayo sio rahisi ku predict.

 

Kwa md5

$password = "admin123";

$neno_siri = "myall@pass# 1+)lkhd";

$hasshed_password = md5($password.$neno_siri);

echo $hasshed_password;

Itakuletea 4e0c20ed60ac98b646b886740ab59344

 

Kwa sh1

$password = "admin123";

$neno_siri = "myall@pass# 1+)lkhd";

$hasshed_password = sha1($password.$neno_siri);

echo $hasshed_password;

Itakuletea 3af05cd45ac6a5b373f6fe2b29864ac6ea7de344

 

Kwa hash

$password = "admin123";

$neno_siri = "myall@pass# 1+)lkhd";

$hasshed_password = hash('gost',$password.$neno_siri);

echo $hasshed_password;

Itakuletea e308f01a40829fc0a3c7a164205048d9461967d1c0941b7624bd17ede270178e

 

Utaona hapo hizo hash zimekuja tofauti na zilivyo mwanza. Hii password hata mmiliki wa hiyo database hawezi kuijuwa yee lamda ataweza kuona hizo hash tu lakini ni password gani unayotumia hawezi kuijuwa.

 

password_hash()

Sasa kuna njia nyuingine ambayo ni salama zaidi. Nayo ni pasword_hash() function. Hii yenyewe inafanyika katika njia kuu 3 ambazo ni kwa kutumia

  1. PASSWORD_BCRYPT

  2. PASSWORD_ARGON2I

  3. PASSWORD_DEFAULT

 

 

Mfano

  1. Kwa kutumia PASSWORD_BCRYPT

$password = "admin123";

$hasshed_password = password_hash($password, PASSWORD_BCRYPT);

echo $hasshed_password;

?>

$2y$10$EYk6uR//N24E2EywuNNoVurlRXddVr5BnzEh2KrQhMDMlPLfIGs02

 

  1. Kwa kutumia PASSWORD_ARGON21

$password = "admin123";

$hasshed_password = password_hash($password, PASSWORD_ARGON2I);

echo $hasshed_password;

?>

$argon2i$v=19$m=65536,t=4,p=1$YnE0TEpQMVE2YVN4UU5tUA$q5hKQvEjeTl7hpQfl9g3ALcWg0q6MuW5PspUQgia5d4

 

  1. Kwa kutumia PASSWORD_DEFAULT

$password = "admin123";

$hasshed_password = password_hash($password, PASSWORD_DEFAULT);

echo $hasshed_password;

?>

$2y$10$7nOugZzV2nXx4JDxzA.B7.yaA/vkM4Kq3H3LUoP33NcmTcp/LEYeC

 

MATUMIZI YA HASHING

Matiumizi ya msingi ya hashing ni kuficha taarifa za mtu. Inaweza kutumia ka kuficha

  1. Password

  2. Id

  3. Email

  4. Na nyinginezo.

Ni vyema kuifanyia hashing password, na email na taarifa nyingine unafanyia encryption. 

 

Sasa tuone jinsi ya kuhakikisha ulinganifu wa password na hash.

Tutakenda kutest hiyo hash ywa kwanza kabisa ya md5 ambayo ni 0192023a7bbd73250516f069df18b500 endapo itakuwa sawa na password yetu tutakayoiweka basi iseme “paasord ipo sawa” na ikiwa haipo sawa hiyo hash na password yru iseme password haipo sawa.

$tested_password = "admin123";

if (md5($tested_password) == "0192023a7bbd73250516f069df18b500")

{

   echo "ipo sawa";

}else echo "jaribu tena";

?>

 

 

Hiyo hapo itakupa majibu ipo sawa. Sasa wacha tuandike passwod hovyo ili tutest je kama ikiwa haipo sawa itakuwaje. Sasa badala ya admin123 tutaweka adam321.

$tested_password = "adam321";

if (md5($tested_password) == "0192023a7bbd73250516f069df18b500")

{

   echo "ipo sawa";

}else echo "jaribu tena";

?>

Hiyo hapo itakupa matokeo jaribu tena.

 

Utatumia njia hiyo kwenye njkia zilizobakia. Sasa wacha tuone kwa kutumia password_hash. Hapa tutatumia function nyingine inayoitwa password_verify(), hii itabeba parameta mbili ambazo ni password mpya  na ya pili ni password ambayo tayari ni hash. Hapa tutatumian ya kwanza hapo juu ambayo ni $2y$10$EYk6uR//N24E2EywuNNoVurlRXddVr5BnzEh2KrQhMDMlPLfIGs02

 

$test_password = "admin123";

 

$hashed_password = '$2y$10$EYk6uR//N24E2EywuNNoVurlRXddVr5BnzEh2KrQhMDMlPLfIGs02';

 

if (password_verify($test_password, $hashed_password)) {

   echo 'Ipo sawa!';

} else {

   echo 'jaribu tena';

}

 

?>

Hiyo itakupa matokeo kuwa ipo sawa. Sasaa wacha turudie tena kwa wrong password adam321

 

$test_password = "adam321";

 

$hashed_password = '$2y$10$EYk6uR//N24E2EywuNNoVurlRXddVr5BnzEh2KrQhMDMlPLfIGs02';

 

if (password_verify($test_password, $hashed_password)) {

   echo 'Ipo sawa!';

} else {

   echo 'jaribu tena';

}

 

?>

Hiyo itakupa matokeo jaribu tena

 

MWISHO:

Tukiutane somo linalofuata tutakapojifunza kuhusiana na encryption na decryption ya data. Kwa kuwa hatuwezi kufanya hashing kwenye taarifa ambazo tunahitaji kuzitumia kama emai, basi njia nzuri ni kuzificha kwa kufanya encryption. Na kufanya decryption wakati wa kutaka kuzitumia.