24. januar 2004 - 17:40Der er
15 kommentarer og 1 løsning
hvordan bruger man Kryptering/ dekryptering
jeg har aldri prøvet at bruge kryptering før. Så det jeg leder efter er en helt grundlægende forklaring.
Når jeg med en <form> sende et loginbruger navn og password til en php fil som tjekker om det står i en mysql DB tabel. Hvordan kryptere jeg så det inden det sendes med og står med klar tekst oppe i adresselinien(er jo ikke lige så smart). Og hvordan dekryptere jeg det så, inden jeg skal foretage tjekket i min php til?
Du skal bruge funktionen md5() til at kryptere det password brugeren taster ind når en kontoen oprettes. Derved får den en 'hash', der er en krypteret streng, der IKKE kan dekrypteres.
Nå brugeren efterfølgende vil logge ind, kryptere du det indtastede password og sammenligning med den krypterede streng i databasen.
Du kan ikke "dekryptere", eller jo, hvis du har en comp til hele tiden at stå og "dekryptere", men så bliver man ikke logget ind før efter lang tid.
Brug POST i stedet for GET i din formular, for at bruger og pass ikke vises i adresse-linien.
I db'en kan du f.eks. gemme et password som md5() krypteret. Det gi'r en streng på op til 32 tegn <?php echo md5("sukos"); ?>
Når du så sammenligner, md5() kryptere du pasword'et førend sammenligningen.
For nu at vise hvordan det gøres på showsource.dk:
$check = mysql_query("SELECT `brugernavn` FROM `sh_brugere` WHERE `brugernavn` = '". $_POST["loginnavn"] ."' AND `password` = md5('". $_POST["pass"] ."')") or die (mysql_error());
Du skal bruge funktionen md5() til at kryptere det password brugeren taster ind når en konto oprettes. Derved får den en 'hash', der er en krypteret streng, der IKKE kan dekrypteres.
Nå brugeren efterfølgende vil logge ind, krypterer du det indtastede password og sammenligner det med den krypterede streng i databasen.
Det betyder naturligvis at du ikke kan sende en brugeren det gamle password, hvis han/hun glemmer det, men du må generere et tilfældigt password og sende det, hvorefter brugen logger ind og laver et nyt.
Til gengæld kan man ikke se alle dine brugeres passwords, hvis man skulle få adgang til databasen, da de jo ligger krypterede.
/sukos: er det rigtigt forstået at, det vil sige at man kun gemmer passworded som kryteret og derfor tjekker man bare om de 2 krypterede strenge er ens?
ok jeg forstår bare ikke helt hvordan det bliver mere sikkert af den grund. Så kan man(dygtig snydepels) bare sende den samme streng(altså kode efter den har været igennem md5) med manuelt som så reelt er passworded?
I mit eks. bliver POST password jo først md5() krypteret ved sammenligningen i sql-sætningen. Så kan ikke lige se hvordan man kan være "dygtig" og sende den krypterede streng med?
Hvis du ikke vil have at enhver half-assed hackerwannabe der tænder for en TCP-dumper og leder efter passwords kan fange dine brugeres password, må du ikke sende dem som klartekst, heller ikke i en POST. Det er ikke sikkert - det er bare 'out of sight, out of mind'.
Den eneste ordentlige måde at gøre det på, er ved at lave en SSL forbindelse, dvs. HTTPS.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.