Hét vraag- en antwoordplatform van Nederland

Wat is hier fout aan? (php staat in uitleg)


function enc($string){
$salt = "IkHoUvAnGoEdEVrIeNdEn12345678909887665432321";
$hash = sha1(md5($salt.$string)).$md5($string).sha1(md5(md5($string)));
return $hash;
}

echo md5("$password");
echo "
";
echo enc("password");
?>

Ik zie de fout niet echt, en heb het al heel vaak bekeken.

Fatal error: Function name must be a string in C:\xampp\htdocs\Sites\login\salt.php on line 5

Verwijderde gebruiker
13 jaar geleden

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Geef jouw antwoord

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

/
Geef Antwoord
+
Selected image

Antwoorden (1)

Je hebt een $ voor de md5() functie staan. Dat hoort niet.
Trouwens, is het maken van een sha hash van een md5 hash niet een beetje over-the-top?? ;-)
(Lees meer...)
Verwijderde gebruiker
13 jaar geleden
Verwijderde gebruiker
13 jaar geleden
haha wat eens stomme fout en dat merkte ik niet eens haha... Het is misschien wel een beetje heftig, maar wel goede beveiliging denk ik. Pepper snap ik nog niet echt, daarom sha1 over md5
Verwijderde gebruiker
13 jaar geleden
Is echt niet nodig. sha1($salt.$string) is cryptografisch niet zwakker dan de ingewikkelde constructie die je nu hebt. Kijk ook eens naar de crypt() functie van PHP. Die is hier speciaal voor bedoelt. De SHA512 is dan natuurlijk het allersterkst! http://us.php.net/crypt
Verwijderde gebruiker
13 jaar geleden
Daar snap ik niet zo veel van:$
Verwijderde gebruiker
13 jaar geleden
Een hash functie, zoals sha1() of md5(), maakt van een input (bv. een string) een output. Echter, deze codering is 1-richtingsverkeer, je kunt dus niet gemakkelijk van de output terug naar de input. (Bij MD5() is dit overigens al wel gelukt, dus die is niet meer veilig genoeg). Daarom is een hash heel geschikt om wachtwoorden mee te verifieren. Je slaat dus niet het wachtwoord zelf op, maar de hash ervan. Als iemand een wachtwoord invoert, hash je het op dezelfde manier, en kijk je of dezelfde hash output eruit komt. Zo kun je het wachtwoord controleren zonder het zelf te kennen, zelfs als je database gehackt wordt. Dus als je sha1($password) opslaat ben je al redelijk veilig. Als elke website dit zo zou doen, is de hash van een gegeven password overal hetzelfde. Daarom voegt men een salt toe. Dat is zeg maar het extra smaakje dat je toevoegt aan het wachtwoord, zodat jouw gehashte variant totaal anders wordt dan die van een andere website. Immers, als je de input string ook maar een karakter anders maakt, komt er al een totaal andere hash uit. Maarrr... wat nog wel gebeurt, is dat twee mensen met hetzelfde wachtwoord, ook dezelfde hash krijgen in jouw database. Dat is niet netjes. Op die manier kun jij heel makkelijk zien welke twee gebruikers hetzelfde wachtwoord hebben (ookal weet je het wachtwoord zelf niet) en dat is een security risico. De oplossing hiervoor is om de username of ook het user-id (als het maar iets unieks is) onderdeel van de salt te maken. Hopelijk begrijp je het nu iets beter?
Verwijderde gebruiker
13 jaar geleden
Ja nu snap ik het :D dank je
Verwijderde gebruiker
13 jaar geleden
Een programmeertaal is net als gewone taal, letters op een rijtje zetten volgens een grammatica. Alleen de grammatica is ietsje strenger en als bij mensentaal. Maar leuk dat je het interessant vindt.
Deel jouw antwoord

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

/
Geef Antwoord
+
Selected image