PHP, MySQL, CSS, XHTML, JavaScript
19. Jul. 2007
PHP / MySQL
Dette blir nevnt over alt, men kan ikke presiseres nok. Det er enda mennesker som går i rundt og absolutt vil kalle hashing for kryptering. Men nei, gutter og jenter, å hashe en streng vil ikke si at streng blir kryptert. Selv om du får et helt absurd resultat vil det ikke si at den er kryptert.
Det finnes flere forskjellig hash metoder som vi bruker i PHP, men de to som blir brukt mest er md5 og sha1. Forskjellen på disse er hovedsakelig bits. Sha1-hash har 40 bits, og md5 har 32. Md5 vil derfor være mer usikker enn sha1, men det vil ikke si at sha1 er sikkert. Det sies at sha1 er teoretisk usikkert, mens md5 er praktisk usikkert.
Men ok, la oss komme tilbake mer på poenget. Du har nå fått vite hva vi som regel bruker til å hashe en streng. (Når det kommer til kryptering kan du bruke funksjoner som crypt().) Men hva er egentlig forskjellen på en streng som er hashet og en streng som er kryptert?
Hovedsakelig så er det ganske enkelt. En kryptert streng kan du dekryptere, og få tilbake til original stand, men det er det ingen mulighet for på hash. Det finnes ingen dehash-funksjon på samme grad som det finnes decrypt. Men ok, du kan brute-force, sjekke i hash-lager osv.
Så la meg presisere det én siste gang. Kryptert streng kan dekrypteres, en hashet streng kan ikke. Derfor: Kryptering er ikke det samme som hashing!
Ikke kryptering, men hash:
Innlegget ble postet 19.07.07 04:21 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.
Funksjonene for generering av hash-verdier i PHP er dessuten ikke bare offer for mange misbeskrivelser m.t.p. ordvalg, men også manglende forståelse for hva som skjer i bakgrunnen. Hvor mange ganger har man ikke lest utsagnet om at sha1(sha1(sha1($value))) er tryggere enn sha1(sha1($value)), f.eks.?
Espen Andersson skrev dette 19 Juli, 2007 15:45 - Sitér
HELLo!
Eller min favoritt:
sha1 (crc32 (md5 ($password)));
Så et lite addendum til artikkelen: Bestandig bruk et salt i lag med verdien som hashes, ellers blir det enkelt å finne ut hva passordet er med å sjekke om mot en hash-table (rainbow tables).
Happy codin’!
Hellkeepa skrev dette 19 Juli, 2007 17:42 - Sitér
Jepp, tenkte jeg skulle nevne det med salting, men det gikk litt utenfor temaet. Ikke at jeg holder meg til det uansett, men.
Når det gjelder kvadrupelbruk av hashing, er det mulig jeg kan skrive om det en annen gang. Om det irriterer meg nok på forum. ;-)
Mikael Brevik skrev dette 19 Juli, 2007 17:47 - Sitér
Hva er da vits med kryptering? Når det kan dekrypteres på 2 sekunder?
Mats Danielsen skrev dette 27 Juli, 2007 18:42 - Sitér
Det kan brukes til å sjule tekst for andre. Du kan lage din egen krypterings algorytme. Så du kan kryptere, og valgte folk kan dekryptere med algorytmen som du har lagd.
PHPs crypt går på en algorytme.
Mikael Brevik skrev dette 28 Juli, 2007 05:51 - Sitér
Mats Danielsen skrev:
Mulig jeg er dum, men det er da ingen funksjon som heter decrypt?
Runar skrev dette 11 August, 2007 12:28 - Sitér
Nei, det finnes ingen decryp () funksjon nativt i PHP, siden crypt er basert på en enveis algorytme. Så du er nok ikke dum.
Mikael Brevik skrev dette 11 August, 2007 17:38 - Sitér