PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   AES_Encrypt mit Hochkomma im Text (http://www.selfphp.de/forum/showthread.php?t=25978)

tsaenger 15.02.2017 15:52:54

AES_Encrypt mit Hochkomma im Text
 
Hallo zusammen,

ich möchte gener mit AES_Encrypt daten in einer Mysql-DB verschlüsseln und habe dazu folgende Update-Befehlt erstellt:
Code:

UPDATE vergleich SET `name` = AES_ENCRYPT('$name', '$salt'), `vorname` = AES_ENCRYPT('$vorname', '$salt'), `migriert` = 1 WHERE `id` = $id
Nun bekomme ich aber ein Problme, wenn mein zu verschlüssender Name ein ' Hochkomma beinhaltet. Dann wird die Abfrage nicht ausgeführt.
Hat jemand von eine eine Idee wie ich das Lösen kann?

Mir fällt aktuell nur ein die Variable in Binär umzuwandeln und dann zu verschlüsseln.

Gruß und Danke

Tobias

sysop 16.02.2017 10:07:03

AW: AES_Encrypt mit Hochkomma im Text
 
Ungeprüft übernimmt man ohnedies keine Variablebn, daher könnte escapen helfen.. http://php.net/manual/de/function.my...ape-string.php
bzw das passende Pendant

tsaenger 16.02.2017 10:12:25

AW: AES_Encrypt mit Hochkomma im Text
 
Guten morgen,

das habe ich auch schon versucht, aber leider klappt das nicht:
Code:

$new_name=mysql_real_escape_string($name);
UPDATE vergleich SET `name` = AES_ENCRYPT('$new_name', '$salt'), `vorname` = AES_ENCRYPT('$vorname', '$salt'), `migriert` = 1 WHERE `id` = $id

Wenn ich mir den Wert mittels echo von $new_name ausgeben lasse bekomme ich eine leere Ausgabe und nicht den Namen mit Escape
Was mache ich falsch?
Ich habe auch versucht die escape-funktion in das mysql-Statement einzufügen, das hatte aber auch nicht geklappt.

Zur genaueren Erläuterung:
Ich habe eine Datenbank in der Namen drin stehen die ohne escape gespeichert wurden. Diese Namen möchte ich mir nun auslesen und mittels AES_encrypt verschlüsselt ablegen.

Dazu öffne ich zuerst die DB:
Code:

$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully <br><br><br>";

dann lese ich die DB aus:
Code:

$sql = sprintf("SELECT id, name, vorname, migriert FROM vergleich",mysql_real_escape_string($name));
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
      $name=$row["name"];

und anschließend will ich Sie wieder verschlüsselt ablegen:
Code:

$new_name=mysql_real_escape_string($name);
$result1 = $conn->query("UPDATE vergleich SET `name` = AES_ENCRYPT('$new_name', '$salt') WHERE `id` = $id and `migriert`=0");


Gruß und Danke für die Hilfe
Tobias

sysop 20.02.2017 10:10:16

AW: AES_Encrypt mit Hochkomma im Text
 
Das ist nicht so einfach, ohne Link muss ich einfach raten.

Wenn ein echo nicht klappt und eine leere Anzeige produziert, tippe ich auf ein Sonderzeichen, das fälschlicher Weise vom Code interpretiert wird.
Derartiges umgeht man mit http://php.net/manual/de/function.ht...ity-decode.php und achtet auf Escaping, wenn man die Werte in Datenbanken und/oder Files ablegen möchte.

Eigentlich ist das kein Hexenwerk, wenn man sich an die Regeln hält.


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:26:51 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.