Hallo PHPhulpjes,

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
?>

waarom zou je dit willen? alleen al dat je hem wil kunnen ontsleutelen betekend dat hij niet sterk genoeg is. Een hash hoef je niet te ontsleutelen, moet niet eens kunnen.

wat is er mis met

<?php
sha1()
//of de veelgebruikte
md5()
?>

???
Inderdaad, waarom zou je hem om willen kunnen draaien? Om iemand het password te kunnen mailen als die hem kwijt/ vergeten is? Nooit doen: Genereer een nieuw password. Als het zo simpel om te draaien is, is het niet veilig. Als jij het eenvoudig kan herleiden kan een ander dat ook.

Gebruik je sha1(); dan is die niet te herleiden, alleen te bruteforcen. Dat is veel beter qua beveiliging.
Ja, waarom zou je iets makkelijk doen, als het ook moeilijk kan.
Ik zou ook base64 kunnen gebruiken, om bijvoorbeeld bepaalde informatie te versleutelen. Het leuke lijkt mij om bijvoorbeeld een geheimtaal te maken.

Kijk, een md5 is ook wel heel erg geheim, maar die kan je naderhand niet lezen. Je kan alleen nagaan door ALLE mogenlijke combinaties na te gaan, wat iemand heeft geschreven (Bruteforce).
Maar dat hoeft niet.

Het probleem is inderdaad, dat hij ontsleutelbaar is, maar is er een mogenlijkheid om die ontsleutelbaarheid lastiger te maken?
Als je niet wilt dat hij ontsleutelbaar is dan moet je ergens in je hash wat data gaan weggooien
Hoe meer functies je er op los laat om de boel door elkaar te husselen hoe beter denk ik. Let dus wel dat je deze ook weer terug kan halen.

Hoe ga je dan zorgen voor een nette uitspuig mogelijkheid? Beter gezegt: hoe ga je zorgen dat de begunstigde van je brief die je in 'geheimtaal' hebt geschreven het netjes op zijn venster krijgt?

En je script op phphulp zetten werkt ook niet mee voor de geheimhouding ;)
"is er een mogenlijkheid om die ontsleutelbaarheid lastiger te maken?"

Brute force probeert gewoon alle mogelijkheden, dus is het logisch om te denken: Des te meer mogelijkheden, des te langer het duurt om de goede te vinden.

Om het moeilijker te maken kan je dus extra karakters toevoegen.
data weggooien is een goede optie indd. Alleen hoe presenteer je het dan weer aan de lezer?

edit: extra karakters toevoegen kan natuurlijk wel. jij weet dan de combinatie van karakters waar je extra karakters aan toevoegd. die kan je later weer strippen en hoppa, daar komt uiteindelijk je tekst!

edit 2: lapidi is back!!! incl oude avatar! toch?
Crispijn schreef op 12.12.2007 15:22
data weggooien is een goede optie indd. Alleen hoe presenteer je het dan weer aan de lezer?


Je bdoelt dat je hem ook weer wilt ontsleutelen? Een hash is er juist voor bedoelt zodat je hem niet kan ontsleuteln ( decoderen ).
Want zodra je data gaat weggooien tijdens het hashen zul je het als het goed is niet meer kunnen decoderen naar de juiste waarde.
hij wil er een geheimtaal van maken toch?
Jep, en wat voor geheimtaal. Als ik hiermee klaar ben, verkoop ik het aan de CIA, NSA en de FBI :P. Ik zie mijn kans schoon:P

Maar het inderdaad de bedoeling dat het geheimtaal word. Hier posten heeft ook weinig zin voor de geheimhouden, maar misschien schrijf ik jullie ook wel een briefje in deze geheimtaal en kan je em zelf ontcijferen (Met behulp van die code natuurlijk) ;).

Ik ga denk iets proberen met HEEL veel berekeningen enzo, en dat ie aan het einde pas een code ervan maakt. :P

Wat in principe kan ik die code die ik nu heb, weer in een andere overlaten lopen etc.



Crispijn

edit 2: lapidi is back!!! incl oude avatar! toch?"

Fijn om weer eens inspraak te mogen hebben hier:p

Reageren