Om gelijk maar met de deur in huis te vallen: Ik liep al tijden rond met het idee om een hash te maken. Ik ben vandaag toch maar eens aan de slag gegaan, maar het is nog moeilijker dan ik dacht, om een goede, sterke hash te maken.
Wat ik heb gemaakt heet volgens mij niet eens een Hash, maar de-/encryptie.
Mijn vraag is nu, is het handig om voor je website beveiliging een eigen HASH of iets dergelijks te schrijven?
Ik neem aan van niet, maar toch lijkt het me leuk om een MOEILIJKE te maken :P.
Dit heb ik tot nu toe:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$s_Input = 'Lapidi'; #! Alleen letters & cijfers
$i_Hash = NULL;
$i_HashCode = NULL;
$i = 0;
$a_DigitsNew = NULL;
$a_Digits = array();
$i_bCounter = 0;
$s_Hash = NULL;
# Maak een array met alle verschillende tekens, A-Z, a-z en 1-9
$a_Digits = array_merge(range("a","z"),range("A","Z"),range(1,9));
# Draai de array van $a_Digits om, zodat je voor elk teken een nummer hebt.
$a_DigitsReverse = array_flip($a_Digits);
#@ Versleutelen:
for($i=0;!empty($s_Input{$i});$i++){
# de hash zelf.
$i_Hash .= $a_DigitsReverse[$s_Input{$i}];
# de sleutel voor het ontsleutelen.
$i_HashCode .= strlen($a_DigitsReverse[$s_Input{$i}]);
}
#@ Zet Sleutel + Hash bij elkaar in 1 variabele
$i_HashNew = $i_HashCode . '-' . $i_Hash;
echo $i_HashNew;
#$ Lapidi geeft output: 212111-37015838
# Gebruik de zojuist gegenereerde hash om te testen.
$i_Input = $i_HashNew;
# splits sleutel en hash.
$a_Input = explode('-',$i_Input);
#@ Ontsleutelen:
for($b=0;$b<(strlen($a_Input[0]));$b++){
# Zoek het bijbehoordende teken met behulp van de sleutel.
$s_Digit = $a_Digits[substr($a_Input[1],$i_bCounter,$a_Input[0]{$b})];
# Doorloop de sleutel
$i_bCounter += $a_Input[0]{$b};
# Genereer de ontsleutelde waarde.
$s_Hash .= $s_Digit;
}
echo'<br/>' . $s_Hash;
#$ 212111-37015838 geeft output: Lapidi
?>