09. juni 2009 - 10:10Der er
4 kommentarer og 1 løsning
sha1 og md5: Forskel og anvendelse?
Hej eksperter,
Jeg sidder og er ved at lave et login & brugerregistrerings modul i PHP, og tager udgangspunkt i to scripts som jeg har fundet, men vil så gerne udbygge det til ét, som passer til mine behov.
Nu er jeg så løbet ind i noget jeg ikke lige kan forstå forskellen på, og håber at i på meget simpelt dansk vil forklare mig det :-)
I det ene script bruger de koden når man logger ind: $md5pass = md5($_POST['usr_pwd']);
I det andet script bruger de koden: $hashed_password = sha1($password);
Jeg har været inde på php.net og læse om sha1, som er ukendt for mig (har brugt md5 før, hvor jeg både gemmer brugerens adgangskode i databasen når de opretter sig i systemet, med md5 kryptering).
Hvert script gemmer ligeledes adgangskoderne for nyoprettede brugere i databasen med henholdsvis md5 og sha1.
Er der en metode at foretrække frem for en anden eller er der nogle særlige ting at være opmærksomme på fra min side? og hvad er konkret forskellen på de to typer?
SHA-1: The Secure Hash Algorithm (SHA) was developed by NIST and is specified in the Secure Hash Standard (SHS, FIPS 180). SHA-1 is a revision to this version and was published in 1994. It is also described in the ANSI X9.30 (part 2) standard. SHA-1 produces a 160-bit (20 byte) message digest. Although slower than MD5, this larger digest size makes it stronger against brute force attacks.
MD5: MD5 was developed by Professor Ronald L. Rivest in 1994. Its 128 bit (16 byte) message digest makes it a faster implementation than SHA-1.
In both cases, the fingerprint (message digest) is also non-reversable.... your data cannot be retrieved from the message digest, yet as stated earlier, the digest uniquely identifies the data.
tak for dit hurtige svar. Spændende læsning, men jeg er stadig lidt mystificeret omkring hvilken en af dem jeg skal bruge og om der er fordele / ulemper ved dem ud over hastigheden.
Jeg bygger ikke kæmpe million-brugere sider, så det er hvilken løsning som passer bedst til mig, men det opklare da lidt med dine to citater.
Til brug i det som du nævner her vil der ikke være nævneværdige forskelle i sikkerheden.
Når man taler envejskryptering vil du typisk også støde på begrebet 'rainbow table' som i realiteten er en oversigt over envejskrypterede strenge.
Eksempel: md5("hello world") vil altid give 5eb63bbbe01eeed093cb22bb8f5acdc3 Slår du MD5 strengen op i en rainbow table, vil du få strengen "hello world" retur.
For at komme ud over det sikkerhedsaspekt (som også vil gælde for sha1) kan du benytte dig af et 'salt'. Salt'et er en streng som kun du kender, som du så sætter sammen med dit kodeord og danner derfor en anden md5 for "hello world" end hvis du ikke gjorde. F.eks: <?php
tak for din gode og udførelige forklaring. Jeg føler mig lidt mere inde i det nu, har også læst lidt mere om det på vores allesammens Wikipedia, og tror bare at jeg vælger den metode mit præmire script jeg tager udgangspunkt i, bruger. Tror det er sha1.
Men super idé og metode med det $salt - den vil jeg straks kigge på. Jeg kan jo lige så godt gøre det sikkert fra starten af :-)
Synes begge svar har været gode, men må nok sige at der ikke kom så meget nyt under solen for mig med omkring forklaringen på de to typer, som kom fra tjaz, så repox, hvis du vil smide et svar, så skal du blive kvitteret med en stak point :-)
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.