2017-10-07 79 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

哦。我不知道哈希方法。我只是讀了他們兩人之間的區別。不過,我認爲在這是一個合理的問題時丟失分數是可恥的,但僅僅是我沒有使用正確的方法... – sincos

回答

-1

我不熟悉該庫php-mysqlidb,但從它的外觀來看,我認爲這不會像勞倫斯在評論中指出的那樣工作。

你可能做的是確實運行此作爲原料查詢: https://github.com/joshcam/PHP-MySQLi-Database-Class#running-raw-sql-queries

而且,我不知道,如果你正確地使用MySQL的函數,來看看這個: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