/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problemer med crypt
Fra : Michael Jensen


Dato : 14-03-02 17:36

Hejsa

Jeg fandt i går ud af at noget på min side på kryptering af password ikke
fungerede som det skulle (det har fungeret i over et år)

Jeg krypterer passwordet med $pass = crypt($password); og gemmer det i
databasen.
Når jeg så skal tjekke passwordet igen ved login gør jeg på følgende måde:
($pass er det brugeren indtastede, $dbpass er det der hentes fra databasen)
/***
* Kode start
***/
$pass=crypt($pass,substr($dbpass,0,2));
if (strcmp($pass,$dbpass)) {
$this->setError("FEJL. Forkert Password");
return false;
}

/***
* Kode slut
***/
Den godkender fint alle de gamle passwords, men hvis jeg nu går ind og
bruger crypt() så kommer det et password der ser meget mærkeligt ud og det
bliver heller ikke godkendt senere. Dette har som sagt virket i over et år,
så tænkte jeg at der måske kunne være ændret noget i PHP.

Jeg har lige snakket med udbyderen og de har lige opgraderet til PHP 4.1.2.
Er det nogen der har hørt om dette problem i de seneste opdateringer?

Hvis jeg bruger crypt på min lokale PHP 4.1.1 (CGI) windows version og
derefter indsætter det manuelt i databasen så fungerer passwordet helt fint
igen...

Håber nogen kan kaste lidt lys over mit problem....
--
Med venlig hilsen

Michael Jensen



 
 
Jacob Brandrup (14-03-2002)
Kommentar
Fra : Jacob Brandrup


Dato : 14-03-02 18:28

> $pass=crypt($pass,substr($dbpass,0,2));
> if (strcmp($pass,$dbpass)) {
> $this->setError("FEJL. Forkert Password");
> return false;
> }

hmmmm hvorfor bruger du 2 linjer og hvad er det her "substr($dbpass,0,2)"
og det her strcmp($pass,$dbpass) for noget. Du har hverken brug for substr
eller strcmp

eks.
if (crypt($pass, $dbpass) != $dbpass)
$this->setError("FEJL. Forkert Password"); return false;

det kan være det hjælper

mvh
Jacob N. Brandrup



Michael Jensen (15-03-2002)
Kommentar
Fra : Michael Jensen


Dato : 15-03-02 16:36


"Jacob Brandrup" <webmaster@forgottenrealms.dk> skrev i en meddelelse
news:a6qmin$sem$1@sunsite.dk...

> hmmmm hvorfor bruger du 2 linjer og hvad er det her "substr($dbpass,0,2)"
> og det her strcmp($pass,$dbpass) for noget. Du har hverken brug for substr
> eller strcmp
>
> eks.
> if (crypt($pass, $dbpass) != $dbpass)
> $this->setError("FEJL. Forkert Password"); return false;
>
> det kan være det hjælper

Hmm, begge metoder virker på begge min servere hvis jeg tester det med et
simpelt script, men når det har været en tur gennem databasen og andet gejl
så går der et eller andet galt der, som jeg ikke lige at energi til at sætte
mig ned og finde ud af. Men jeg har fikset det på en anden måde, så det går
nok.

Tak for hjælpen anyway

--
Michael Jensen



Niels Andersen (14-03-2002)
Kommentar
Fra : Niels Andersen


Dato : 14-03-02 18:37

Michael Jensen wrote:
> $pass=crypt($pass,substr($dbpass,0,2));
> if (strcmp($pass,$dbpass)) {

Den kode virker kun med hash-algoritmer der bruger et salt på max to tegn.
Prøv at kigge på http://dk.php.net/crypt, kig især på ekspemplet.

if ($dbpass == crypt($pass,$dbpass)

Så skal den nok selv finde salt osv.

--
Mvh.

Niels Andersen

Søg
Reklame
Statistik
Spørgsmål : 177505
Tips : 31968
Nyheder : 719565
Indlæg : 6408554
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste