Hallo,

Ik heb een functie gemaakt die kijkt of er md5 of sha1 gebruikt is. Vervolgend zou de functie het woord wachtwoord moeten encrypten. Maar dit doet hij niet.

Kan iemand mij helpen waar de fout zit?

alvast bedankt.

mijn code is:


function encrypt($invoer, $methode){
if($methode == "md5"){
return md5($invoer);
}else{
return sha1($invoer)
}


}


$invoer = "wachtwoord";
echo myHashing($invoer, $methode);
Functienamen komen niet overeen?
Variable $methode bestaat niet onderin je script?
Je defineert $methode niet bij het aanroepen van de functie.
je roept de functie "encrypt()" nergens aan.

Volgens mij is de functie "encrypt()" ook een standaardfunctie van PHP dus op deze manier is het vragen om problemen.
Alle opmerkingen daargelaten, zo te zien is het antwoord van Maarten correct, en daarmee die van Aar ook. Ik snap niet helemaal waar opmerkingen over "oh nee je kan beter een andere functie gebruiken" vandaan komen. Dat was de vraag niet. Ook is encrypt() geen standaard PHP functie, crypt() wel.


<?php
function encrypt ($invoer, $methode = 'sha1')
{
  if ($methode == 'md5') {
    return md5($invoer);
  } else {
    return sha1($invoer);
  }
}

$invoer = 'wachtwoord';
echo encrypt($invoer, 'sha1'); // of laat de 2e param weg als je standaard al sha1 wilt hebben

Ben, de extra suggesties zijn een vriendelijke service van de forum leden. md5 en sha1 zijn totaal niet meer veilig. Iets als sha256 is trouwens nog wel goed te doen en wat minder overkill als wat password_hash is (welke trouwens pas is toegevoegd in PHP 5.5).
Uiteraard is het handig om een suggestie te doen, maar doe het dan ook vriendelijk. Mijn punt is vooral dat het de vraag niet was, de vraag was "waarom werkt dit niet". Het antwoord daarop is niet "password_hash is veiliger".
Ik nam aan dat Robert de code niet gekopieerd en in dit topic geplakt heeft maar (iets te) snel iets vergelijkbaars heeft geschreven en daardoor een paar foutjes heeft gemaakt:
- niet overeenkomende functie namen
- het niet defineren van $methode
- het vergeten van de ; bij de tweede return

Mocht het wel gekopieerd en geplakt zijn dan kan hij een witte pagina verwachten als error reporting uit staat doordat de missende ; een parse error genereert.

@Ben
Voor zover ik weet kan hij een oude tutorial aan het volgen zijn die beweert je te leren een veilig login systeem te schrijven met behulp van md5/sha1. In dat geval denkt hij het bovenstaande stuk code werkend te hebben, terwijl hij in werkelijkheid de suggestie om password_hash() te gebruiken nodig heeft. Dat is dus waar mijn suggestie vandaan kwam.
Verder was het absoluut niet de bedoeling onvriendelijk over te komen, maar als je een topic maakt dat neer komt op "hier is niet werkende code, zoek zelf maar uit waarom ik vindt dat het niet werkt, geef me de fix" dan hoef je niet meer te verwachten dan reacties die net zo kort door de bocht zijn. Als je die wel krijgt is het mooi meegenomen.

We hebben nu niet genoeg info om je echt te helpen, Robert. Het beste dan we kunnen doen is gokken. Is de code in dit topic de exacte code die voor problemen zorgt? Wat is het resultaat wanneer je de code uitvoert? Witte pagina? Een error? Niet de output die je verwacht? iets anders?

PS. password_hash() zit inderdaad vanaf 5.5 in de core van PHP. Vanaf 5.3.7 tot 5.5 zul je extra bestanden moeten includen: https://github.com/ircmaxell/password_compat. Dat zou geen probleem moeten zijn aangezien een redelijk recente PHP versie gebruiken ook nodig is voor een veilig inlog systeem.
Ben van Velzen op 03/10/2015 02:44:07

Uiteraard is het handig om een suggestie te doen, maar doe het dan ook vriendelijk.

Ik moet zeggen dat ik het wel mee vind vallen met de onvriendelijke opmerkingen. Mensen praten hier vaak op een "snelle" manier. Dus in plaats van "Ik zou je ten harte aanbevelen om als encryptiemethode geen gebruik te maken van MD5." staat er dan simpelweg "Gebruik beter geen MD5.". Zover ik kan zien is het in de bovengenoemde opmerkingen nergens onvriendelijk bedoeld. En geloof me ... soms gaat het er hier ook wel eens onvriendelijk aan toe, maar dan wordt er echt op een andere manier gepraat ;-)
Sidenote: hashing is iets compleet anders dan en/decryptie.

Een functie encrypt noemen die vervolgens iets hasht is dus niet zo'n verstandige keuze...

Reageren