brockerdocker: Ver- und Entschlüsseln mit AES_ENCRYPT

Hallo,
ich möchte Datenbankeinträge verschlüßelt speichern. Dies versuche ich mit der AES_ENRCPT - Mysql - Funktion. Dadurch werden die Daten auch verschlüßelt. Will ich sie jedoch wieder entschlüßeln, geht das nicht. Es erscheint einfach nicht. Die Funktion gibt nichts aus. Wenn ich bei phpmyadmin den Datentyp für den entsprechenden Spalteneintrag auf varchar stelle, sehe ich nur noch cryptische Zeichen. Das verschlüßeln funktioniert also. Das entschlüßeln jedoch nicht.
Ich habe auch schon BLOB als Speichertyp gewählt, - mit dem gleichen Ergebnis. Jetzt weiß ich nicht mehr weiter.
Hier nochmal mein Quellcode:

codieren:
INSERT INTO adressen (id, Vorname, Name) VALUES ('', AES_ENCRYPT('$_POST[Vorname]', 'passwort'), '$_POST[Name]')";

decodieren:
$sql = "SELECT AES_DECRYPT('Vorname', 'my_salt'), Name FROM adressen";
$result = mysql_query($sql);
$zeilen = mysql_num_rows($result);
$zahlen = 0;
while ($row = mysql_fetch_assoc($result)) {
$zahlen++;
echo "<p id='c'>$row[Vorname] $row[Name]</p>";
}

OK, das wars, danke schonmal für eure Hilfe!
mfg brockerdocker

  1. yo,

    ich kenne die funktion nicht besonders, aber kann es sein, dass du als zweites argument immer die gleichen werte verwenden musst, was bei dir einmal passowrt und das andere mal my_salt ist. vielleicht soll ja passwort eine variable darstellen ?

    Ilja

    1. Hallo!
      Natürlich, stimmt! Dummerweise war dies nur ein Versehen beim kopieren hier ins Forum. Beim austesten habe ich die gleichen Werte benutzt :(.
      Danke aber trotzdem!

      1. Beim austesten habe ich die gleichen Werte benutzt :(.

        Ist die Datenspalte breit genug? aes_encrypt() gibt unter Umständen längere Zeichenketten zurück als verschlüsselt werden, siehe http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html#function_aes_encrypt.

        Falls es daran auch nicht liegt, probiere es erstmal ohne Formularkram, mit einem festen Wert.

        1. Danke erstmal,
          ich habe allerdings den verschlüßelten Wert in einem Feld des Typs blob gespecihert. Da kann ich ja keine Länge angeben. Ich denke also, dass es nicht daran liegt.
          tschau brockerdocker

  2. echo $begrüßung;

    INSERT INTO adressen (id, Vorname, Name) VALUES ('', AES_ENCRYPT('$_POST[Vorname]', 'passwort'), '$_POST[Name]')";

    Benutzereingaben direkt in SQL-Statements einbauen, ist grob fahrlässig. Im einfachsten Fehlerfall gibt der Benutzer ein ' ein, weil er eins im Namen hat (z.B. O'Conner). Das gerät dann in Konflikt mit den zwecks Stringbegrenzung enthaltenen '. In schwerwiegenderen Fällen verändert er das Statement nach seinen Wünschen. Literaturtipp: PHP-Handbuchkapitel Database Security

    $sql = "SELECT AES_DECRYPT('Vorname', 'my_salt'), Name FROM adressen";

    Apropos Stringbegrenzer ... Feldnamen damit einzurahmen macht aus ihnen Strings.

    echo "$verabschiedung $name";