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

Als je dit kan lezen heb je de geheime code succesvol ontcijferd
PHPHulpjes, Bedankt voor het meedenken aan deze code! Lapidi
- Einde Geheime Boodschap -
Het is nog gelukt ook:) Wat zeg je daarvan ;)

Als je ook maar 1 cijfer verkeerd typt, dan krijg je een error van 30 pagina's :')

Waar kan je dit voor gebruiken?

link.nl/ontcijferen.php?sleutel=12122007&code=bladibladibladibladibladibladibladibladibladiblaidabladiblad
om een geheime boodschap door te sturen? :')
kijk eens naar XOR. Opzich wel een verplichting om te gebruiken wanneer je goed aan de slag wilt gaan.
Ik keek bij google naar XOR, en ik kwam op allemaal leuke websites, zelfs een spel genaamd XOR, maar ik weet nu niet precies wat je me probeert duidelijk te maken. In welke context moet ik XOR gezien hebben?
Ah top, leuk dat je het werkend hebt en dat je mijn idee hebt gebruikt. Kan je niet een aantal delingen toepassen om het aantal cijfers te reduceren? Gewoon de dag*maand gebruiken om door te delen ofzo? Moet je wel een oplossing vinden voor de decimalen die hier uit (kunnen) komen... alleen je kan natuurlijk altijd afronden als je de sleutel, de datum hebt.

Ben benieuwd naar je verdere ontwikkelingen!

Cris
Goede encryptie en hashfuncties maken per definitie gebruik van modulo's en de xor-operator. Als je dit niet hebt dan weet je bij voorbaat al dat het zo gekraakt kan worden. Daarnaast is een goede hashfunctie eigenlijk niet in PHP te maken omdat PHP te traag is en niet met grote getallen kan werken.

Reageren