Avatar billede mobildata Nybegynder
24. november 2006 - 22:22 Der er 9 kommentarer og
1 løsning

Validering af streng

Jeg har en streng der skal parses fra et script på et domæne til et script på et andet domæne.

Og er kommet frem til denne måde at validere strengen på.
strengen skal ikke være hemmelig den skal bare ikke kunne manipuleres fra script1 -> script2

script 1

$streng = "test";
$salt = "meget lang kode"; //f.eks sdahah272jsga$sastqwqw
$key = md5($streng.$salt);

header("Location: script2.php?streng=".$streng."&key=".$key."");

$streng + $key sendes til script 2


script 2

$salt = "meget lang kode"; //samme som script 1
$userkey = md5($_GET['streng'].$salt);

if ($userkey == $_GET['key']){
echo "stregnen er valid";
}


er dette sikkert nok, hvis vi ser bort fra at md5 kan kolidere
én ud af 1.000.000++ tilfælde...?
Avatar billede Slater Ekspert
24. november 2006 - 23:11 #1
MD5 krypteringen er blevet brudt, så den er ikke helt sikker, nej.
Jeg ville bruge SHA1 i stedet, hvis jeg var dig.
Avatar billede coderdk Praktikant
24. november 2006 - 23:23 #2
viperine, SHA1 kun lidt mere sikker ;) MD5 er fint i dette tilfælde. Det er også det som flere betalingsservices bruger.

mobildata, Det er helt fint i mine øjne :) Jeg plejer at gøre som betalingssystemerne, noget i stil med:

$key = md5( md5( $streng ) . $salt );

Men i princippet er dit lige så godt ;)
Avatar billede pidgeot Nybegynder
24. november 2006 - 23:25 #3
Nu er MD5 ingen kryptering, men en hash, og det er derfor pr. definition ikke muligt at finde originalstrengen ud fra en MD5-hash, det er kun muligt at lave en kollision. Dvs. at det at anvende en saltværdi gør at det ER sikkert (bortset fra den lille kollisionsrisiko der er på 1 ud af 2^128), fordi en hacker ikke har mulighed for at vide hvad den saltværdi er, eller hvordan den anvendes på strengen inden MD5 beregnes (og selv hvis han havde al den viden, mener jeg ikke det er ligetil at lave en kollision når strengen skal indeholde noget bestemt på et bestemt sted).
Avatar billede Slater Ekspert
24. november 2006 - 23:31 #4
.. og hashing er en form for kryptering, også kaldet envejs-kryptering, men dog stadig kryptering.

Per definition kan man ikke finde originalstrengen, men eftersom den er brudt, er det muligt at lave en ny streg, som har den samme MD5-værdi, dermed er dette ikke sikkert. Selvfølgelig er SHA1 kun lidt mere sikkert, men så vidt jeg ved er den endnu ikke blevet brudt.
Avatar billede coderdk Praktikant
24. november 2006 - 23:39 #5
viperine, Neeeej, kryptering er per definition en måde at beskytte noget med en kode, så  den er ulæselig for uautoriserede parter.

En hashfunktion er dog en kryptografisk funktion ;)

Som pidgeot skriver, skal du lave originalstrengen om, og generere en hashværdi der passer til din nye streng, og det kan du ikke, da du ikke kender saltet.

pidgeot, Good point! :)
Avatar billede coderdk Praktikant
24. november 2006 - 23:42 #6
mobildata, Undskyld vi bruger dit spørgsmål :\
Avatar billede Slater Ekspert
25. november 2006 - 02:22 #7
coderdk - Forstår du hvad jeg siger? Du kan GODT lave en ny streng, der passer til hash-værdien. Saltet er fuldstændig ligegyldigt, da bruddet på MD5-krypteringen tillader en at lave en streng, der har en bestemt MD5-værdi.

http://www.mathstat.dal.ca/~selinger/md5collision/
Avatar billede coderdk Praktikant
25. november 2006 - 05:19 #8
Ja, jeg forstår det godt ;) Pointen er at du skal ændre hans streng og lave en md5 der passer til hans scheme, forstår du det nu?
Avatar billede mobildata Nybegynder
25. november 2006 - 20:39 #9
coderdk, du kom tættest på svaret på mit spørgsmål. hele md5 problematikken kender jeg godt. bare læg et svar.

viperine, jeg ville også bruge SHA1 hvis den var hurtigere end md5 og hvis min PHP version var nyere. :-(

samtidig er min "salt" mere end bare en statisk streng, den er dynamisk og ændrer sig selv. 

tag f.eks: $salt = "gsJd72jsjskq&".date('d.m.y.H.i')."jSd22is";
så vil salten kun være den samme inde for samme minut.
Avatar billede coderdk Praktikant
26. november 2006 - 01:25 #10
ok (c:
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester