MD5-Variable mit einer (nicht)-MD5-Variablen aus DB vergleichen

dwex

Erfahrenes Mitglied
Hallo Leute,

mein Titel ist zwar ein bischen irreführend aber ich wusste echt nicht wie ich das kurz beschreiben soll.

Also ich habe hier eine Datenbank (MySQL).
In dieser DB sind z.b. eMail-Adresse, Name, etc. gespeichert.

Ich mache mit einem anderen Script eine Prüfsumme aus 2 DB-Feldern.
Es handelt sich dabei um eine Newsletterab- bzw. anmeldung.
Die Prüfsumme (MD5) hänge ich dann an die Url an.

Jetzt möchte ich (ich habe das schon mal wo gelesen das es geht) den MD5-Hash meiner Summen mit den Einträgen in der Datenbank vergleichen.
Leider funktioniert das nicht und $zeilen bringt mir immer 0 obwohl er was finden müsste.
Was mache ich falsch?

Hier mein Code:
PHP:
$pruefsumme = $_GET['summe'];

$summe1 = substr($pruefsumme, 0, 32);
$summe2 = substr($pruefsumme, 32, 63);

$abfrage = mysql_query("SELECT * FROM `items` WHERE `items_id` = MD5('" . $summe1 . "')  AND `email` = MD5('" . $summe2 . "')  LIMIT 1");
$zeilen = mysql_num_rows($abfrage);
Vielen Dank für euer Hilfe im voraus!
 
Hallo

Ich wusste gar nicht das sql md5 unterstützt, aso konvertieren kann.
Wenn du diese Daten normal mit PHP ausliest und dann vergleichst sollte es jah au gehen oder nicht?
 
Bei 20.000 Datensätzen möchte ich das meinem Server nicht antun.
Ja es funktioniert - mann kann aus einer DB mit einem SELECT-Befehl die jeweiligen Variablen bereits als MD5 ausgeben.
 
PHP:
$summe1 = md5(substr($pruefsumme, 0, 32));
$summe2 = md5(substr($pruefsumme, 32, 63));

Warum nicht vorher die summen in md5 umwandeln und dann in die DB schicken?

PHP:
$statement = "SELECT * FROM items WHERE items_id = ".$summe1."  AND email = ".$summe2." LIMIT 1";
 
Wenn die Daten in der Datenbank als Klartext stehen und mit einem Hash-Wert verglichen werden sollen, musst du auch den Hash-Wert von den Daten aus der Datenbank berechnen und nicht den Hash-Wert des Hash-Werts.


PS: Meines Wissens besitzt SQL selbst keine MD5-Funktion, MySQL hingegen schon.
 
Ich glaube ich habe mich nicht richtig ausgedrückt.

Die Summen sind bereits MD5 - in der Datenbank (die MySQL ist) steht alles im Klartext.
 
Ja, dann musst du einfach den Hash-Wert der Daten aus der Datenbank erzeugen und mit dem bereits erzeugten Hash-Wert vergleichen:
PHP:
$query = '
	SELECT
	        *
	  FROM
	        `items`
	  WHERE
	        MD5(`items_id`) = "'.$summe1.'"
	    AND MD5(`email`)    = "'.$summe2.'"
	  LIMIT
	        1
	';
 
Oh man, bin ich dämlich!

Ist ja klar das es so wie ich es geschrieben habe nicht funktionieren kann.
Danke Gumbo für den Wink mit dem Zaunpfahl.
 
Zurück