|
| 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
| |
|
|