[php/mysql] passwords

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Hallo, ik heb een heel erg vreemd probleem, waar ik niet uitkom, zelfs niet na veel documentatie erover te hebben gelezen.
Het gaat over een simpele wachtwoord encryptie in php/mysql.

De gebruiker logt zich in en komt in een gepersonaliseerd gedeelte.
Hierin wil deze een test uitvoeren, en krijgt hiervoor een activatie code, als volgt:

(Sessies werken overigens prima en de waarden worden ook goed in de database gezet.)
PHP:
1
2
3
4
5
$_SESSION["activation_key"] = "123456";

$query = "INSERT INTO ".$db_table_sessions."( user_id, time_stamp, ip_address, activation_key ) "
        ."VALUES(".$_SESSION["user_id"].", '%".$time_stamp."%', '".$ip_address."', PASSWORD('".$_SESSION["activation_key"]."') )";
mysql_query( $query );

Ook als ik echo $query doe, ziet deze er goed uit.

In de database komt er nu netjes te staan:
code:
1
2
3
4
5
 --------------------------------------------------------------------------
| session_id | user_id |          time_stamp | ip_address | activation_key |  
 --------------------------------------------------------------------------
|          7 |      73 | 2003-12-29 02:30:03 |  127.0.0.1 |         565491 |
 --------------------------------------------------------------------------

ook al staat er in de mysql documentatie het volgende:

The PASSWORD() function is non-repeatable. That is, with a given argument X, successive calls to PASSWORD(X) generate different results.

toch blijft de password functie bij mij steeds de output: 565491 geven bij invoer 123456

Daarom wil ik als volgt later wanneer de activation_key wordt ingevuld, bij het uitvoeren van een test, controleren of de juiste activatie code bij de juiste gebruiker hoort:
PHP:
1
2
3
4
5
6
$activation_key = $_POST["input_activation_key"];

$query = "SELECT * "
        ."FROM   ".$db_table_sessions." "
        ."WHERE  activation_key=PASSWORD('".$activation_key."') "
        ."AND    user_id=".$_SESSION["user_id"];

Dus als ik "123456" invul, dan zou de PASSWORD functie deze converteren en zou deze gelijk moeten zijn aan de al geconverteerde waarde in de database. Het user_id klopt ook 100% zeker, alleen krijg ik steeds een lege resultset terug. Iemand enig idee wat ik fout doe. Heb ook gelezen dan de password functie eigenlijk beter niet kan worden gebruikt maar SHA1 of MD5, maar wil eerst dit aan de praat hebben :) Bvd

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Je pakt nu het password van de encryptie. Je moet bij deze query het password gedeelte dus weglaten. Dan krijg je zoiets:

code:
1
2
3
4
$query = "SELECT * "
        ."FROM   ".$db_table_sessions." "
        ."WHERE  activation_key=".$activation_key
        ."AND    user_id=".$_SESSION["user_id"];


Als je btw MD5 wilt gaan gebruiken, moet je PASSWORD() vervangen door MD5(), en ben je klaar.

(Dit is ervanuitgaande dat je de gebruiker "565491" laat invullen, wat ik meen op te maken uit je verhaal.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Grijze Vos schreef op 29 december 2003 @ 03:46:
Je pakt nu het password van de encryptie. Je moet bij deze query het password gedeelte dus weglaten. Dan krijg je zoiets:
...
(Dit is ervanuitgaande dat je de gebruiker "565491" laat invullen, wat ik meen op te maken uit je verhaal.)
volgens mij toch niet hoor, ik pak de encryptie van de ingevoerde activation key, en vergelijk deze met de al eerder ge-encrypte key in de database.

en ik wil natuurlijk de gebruiker "123456" (makkelijk) inlaten vullen, maar in de database moet er "565491" (onleesbaar) komen te staan...

correct me if i'm wrong

Acties:
  • 0 Henk 'm!

Verwijderd

Als je iedere keer een ander wachtwoord zou krijgen wanneer je PASSWORD(x) aan roept, dan kan je deze toch later nooit met elkaar vergelijken?! Ik ken de PASSWORD functie in MySQL niet zo goed, maar ik weet wel dat MD5('test') altijd dezelfde hash terug geeft..

Acties:
  • 0 Henk 'm!

  • T-h-i-j-s
  • Registratie: April 2000
  • Laatst online: 14-06 21:00

T-h-i-j-s

koffie? ja lekker :)

Als je een MD5-hash toepast op een string en je gebruikt dezelfde saltstring (de 8 characters tussen "$1$" en "$" van de gehashde string), dan krijg je weer dezelfde hash.

Volgens mij levert PASSWORD() telkens dezelfde hash op (moet ook wel); er wordt itt MD5 geen gebruik gemaakt van een (dynamische) saltstring. Alleen bedoelen ze wellicht dat het niet omkeerbaar is. Je kunt uit de hash dus niet direct terug naar de gehashede string (duh). Maar dezelfde string dmv PASSWORD hashen, levert wel steeds hetzelfde resultaat.

Acties:
  • 0 Henk 'm!

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
Thijs_w schreef op 29 december 2003 @ 11:47:
Volgens mij levert PASSWORD() telkens dezelfde hash op (moet ook wel); er wordt itt MD5 geen gebruik gemaakt van een (dynamische) saltstring. Alleen bedoelen ze wellicht dat het niet omkeerbaar is. Je kunt uit de hash dus niet direct terug naar de gehashede string (duh). Maar dezelfde string dmv PASSWORD hashen, levert wel steeds hetzelfde resultaat.
zo denk ik er inderdaad ook over, maar wat zou er dan fout zijn aan de sql query?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Weet je zeker dat je activation_key veld niet toevallig te klein is? Of dat 't een INT veld is, terwijl een PASSWORD-aanroep een hash genereert die ook letters kan bevatten?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

Krooswijk.com schreef op 29 december 2003 @ 03:12:

In de database komt er nu netjes te staan:
code:
1
2
3
4
5
 --------------------------------------------------------------------------
| session_id | user_id |          time_stamp | ip_address | activation_key |  
 --------------------------------------------------------------------------
|          7 |      73 | 2003-12-29 02:30:03 |  127.0.0.1 |         565491 |
 --------------------------------------------------------------------------
565491 kan nooit de (volledige) uitvoer van de PASSWORD() functie zijn. De uitvoer ervan is 16 bytes, en vanaf 4.1 41 bytes. Kijk de lengtes van je velden na, en zorg ervoor dat je PASSWORD() een string voert, en geen integer.

Acties:
  • 0 Henk 'm!

  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
drm schreef op 29 december 2003 @ 17:04:
Weet je zeker dat je activation_key veld niet toevallig te klein is? Of dat 't een INT veld is, terwijl een PASSWORD-aanroep een hash genereert die ook letters kan bevatten?
damnit, dacht slim te zijn en de varchar velden net zo groot te maken als de lengte van de invoerstrings, maar inderdaad hij heeft een veld van 16 bytes nodig, tnx
Pagina: 1