2017-10-07 6 views
-1

Gibt es eine Möglichkeit zum Einfügen/Update in der Datenbank mit MysqliDB und AES_ENCRYPT?Wie Verschlüsseln/Entschlüsseln Passwort mit MysqliDB

$data = Array("Password" => "AES_ENCRYPT('" . $varToEncrypt . "', 'encryptKey')"); 
     $db->where("Username", "admin") 
      ->update('user', $data); 

mit dieser Methode, habe ich dies in meiner Anfrage:

UPDATE user SET `Password` = 'AES_ENCRYPT('000000', \'blablabla\')' WHERE Username = 'admin'; 

es aussieht, wenn ich den Wert "AES_ENCRYPT ..." setzen in der Anordnung, dauert es als String .. .

Oder ich brauche $ db-> rawQuery ??

+4

Warum versuchen Sie ein Passwort zu verschlüsseln? Ein Passwort sollte immer gehashed werden! –

+0

'AES_ENCRYPT' ist eine Funktion, die als Wert übergeben wird. –

+0

oh. Ich kannte die Hash-Methode nicht. Ich habe gerade über den Unterschied zwischen beiden gelesen. Aber ich finde es eine Schande, Punkte zu verlieren, wenn es eine legitime Frage ist, aber nur, dass ich nicht den richtigen Ansatz verwendet habe ... – sincos

Antwort

-1

Ich bin nicht vertraut mit dieser Bibliothek php-mysqlidb aber von dem Aussehen davon denke ich nicht, dass das so funktionieren wird, wie Lawrence in den Kommentaren darauf hingewiesen hat.

Was können Sie tun müssen, ist in der Tat diese laufen als Ausgangs query: https://github.com/joshcam/PHP-MySQLi-Database-Class#running-raw-sql-queries

Auch ich bin nicht sicher, ob Sie die MySQL-Funktion richtig verwenden, werfen Sie einen Blick auf diese: https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-encrypt

Sie sollten es vermeiden, das Passwort als verschlüsselte Zeichenfolge zu speichern (die entschlüsselt werden kann, manche würden sagen, dies ist eine schlechte Sicherheit/Praxis).

Stattdessen; Warum würden Sie die eingebaute Hash-Funktion von PHP nutzen?

Werfen Sie einen Blick auf: http://php.net/manual/en/function.password-hash.php

Wenn ein Benutzer das Klartext-Passwort eingibt, z $my_password = '123456' - hash es wie folgt aus:

$hashed_password = password_hash($my_password, PASSWORD_DEFAULT); 

speichern Sie dann den Wert von $hashed_password in der Datenbank.

Wenn Sie wollen, dann überprüfen, ob der Benutzer das richtige Passwort eingegeben hat, nehmen Sie einfach die Benutzereingabe und den gespeicherten Wert in der Datenbank und verwenden Sie diese Funktion, wenn das Hash-Spiel vergleichen:

http://php.net/manual/en/function.password-verify.php

So:

$login_password = '123456'; 
$db_hashed_pass = '$2y$10$.vG....'; // this value is loaded from db for that user 

if (password_verify($login_password, $db_hashed_pass)) { 
    // password is correct 
} else { 
    // password is wrong 
} 

Auf diese Weise ist es sicherer und auch wenn Ihr db gefährdet ist; Ich glaube, niemand wird in der Lage sein zu trainieren, was das verwendete Passwort war, da es nur ein Hash des ursprünglichen Passworts ist.

+0

Warum die Abstimmung runter? Ich habe das schon gefragt und jemand hat meinen Kommentar gelöscht? – Latheesan