Beveik kiekviename projekte prireikia saugoti „jautrius“ duomenis duomenų bazėje. Slaptažodžių šifravimui gali būti naudojama daug metodų: pradedant standartiniu md5() , baigiant „savadarbėmis“ funkcijomis.
Pažiūrėkime, kaip atrodo md5() funkcija užhešuotas tekstas:
<?php echo md5( 'FooBar' ) ; ?>
↓
f32a26e2a3a8aa338cd77b6e1263c535
sha1() :
<?php echo sha1( 'FooBar' ) ; ?>
↓
eb8fc41f9d9ae5855c4d801355075e4ccfb22808
Dabar pažiūrėkime, kaip hešuoja PHP funkcija crypt() :
<?php $t = 'FooBar' ; echo crypt( $t ).'<br>' ; echo crypt( $t ).'<br>' ; echo crypt( $t ).'<br>' ; ?>
↓
$6$lMf9ZPUl$QLFkxS6wJDwH1CJrU/v8qdikoYFaIo.HiML3hPmmSBMaISCoGD/Qx3a/XmgixLYC7HznkmFE3wa9ctWNxOPuT1 $6$3j619K0V$2mq1JKQToeXqVDQRKWVeEbC7OvwycdKViuHHhskVFWCmv4KKhTQzMMMJPGy6gDpPoSABT6.kfQSzMhVkgyMbM/ $6$l8wbdjK2$udg6oz.GHcQnRrHBjJ3GBdTkosOO1Og6MDhFl.tgJGbM8aquhfMmPgTfcrfShcxCdCisYdX87TGyXh9gijuz70
Kaip matome, funkcijos rezultatas nesikartoja (!).
Šitaip „sudarkytą“ slaptažodį ramiai saugom DB.
Patikrinimas? Prašom:
<?php $user_input = 'FooBar' ; $hash = '$6$lMf9ZPUl$QLFkxS6wJDwH1CJrU/v8qdikoYFaIo.HiML3hPmmSBMaISCoGD/Qx3a/XmgixLYC7HznkmFE3wa9ctWNxOPuT1' ; var_dump( $hash === crypt( $user_input, $hash ) ) ; $hash = '$6$3j619K0V$2mq1JKQToeXqVDQRKWVeEbC7OvwycdKViuHHhskVFWCmv4KKhTQzMMMJPGy6gDpPoSABT6.kfQSzMhVkgyMbM/' ; var_dump( $hash === crypt( $user_input, $hash ) ) ; $hash = '$6$l8wbdjK2$udg6oz.GHcQnRrHBjJ3GBdTkosOO1Og6MDhFl.tgJGbM8aquhfMmPgTfcrfShcxCdCisYdX87TGyXh9gijuz70' ; var_dump( $hash === crypt( $user_input, $hash ) ) ; ?>
↓
boolean true boolean true boolean true
Поплавский, надеюсь, уже все понятно?
Plačiau apie crypt().