2017-10-07 31 views
-1

MysqliDBとAES_ENCRYPTを使用してデータベースに挿入/更新する方法はありますか?この方法で MysqliDBを使用してパスワードを暗号化/復号化する方法

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

は、私は私のクエリでこれを取得する:

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

それは私が配列に値「AES_ENCRYPTを...」を配置するときのように見えるが、それは文字列として取ります。..

または、私は$ db-> rawQueryを使用する必要がありますか?

+4

なぜパスワードを暗号化しようとしていますか?パスワードは常にハッシュされるべきです! –

+0

'AES_ENCRYPT'は、値として渡される関数です。 –

+0

oh。私はハッシュ法を知らなかった。私はちょうど両方の違いについて読んだ。しかし、合法的な質問ではポイントを失うのは残念ですが、私は正しいアプローチを使用していませんでした。 – sincos

答えて

-1

私はそのライブラリphp-mysqlidbに慣れていませんが、その外観からは、ローレンスがコメントで指摘したようにうまくいくとは思えません。あなたが実際に生のクエリとして、これを実行されなければならないことは何

:あなたは正しくMySQLの機能を使用している場合も https://github.com/joshcam/PHP-MySQLi-Database-Class#running-raw-sql-queries

、私はわからない、これを見てみましょう:https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-encrypt

パスワードを暗号化された文字列として保存するのは避けてください(暗号化された文字列として保存する必要があります。

代わりに、 PHPのハッシュ機能を組み込んだのはなぜですか?ユーザーは、例えば、プレーンテキストのパスワードを入力するとhttp://php.net/manual/en/function.password-hash.php

は見てみましょう$my_password = '123456' - このようにそれをハッシュ:

$hashed_password = password_hash($my_password, PASSWORD_DEFAULT); 

が続いてデータベースに$hashed_passwordの値を格納します。あなたは、ユーザーが正しいパスワードを入力した場合、その後検証するとき

、単にデータベースのユーザ入力および格納された値を取り、ハッシュが一致した場合に比較するには、この機能を使用します。

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

このよう

$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 
} 

このように、それはより安全だし、あなたのデシベルが侵害されたとしても、私は誰も、元のパスワードのハッシュだけであるので、使用されたパスワードが何であるかを練習することができないと信じています。

+0

なぜ賛成投票ですか?私はすでにこれを頼み、誰かが私のコメントを削除しましたか? – Latheesan

関連する問題