有没有办法使用MysqliDB和AES_ENCRYPT在数据库中插入/更新?
$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 ...&#34时,它看起来像在数组中,它需要一个字符串......
或者我需要使用$ db-> rawQuery ??
答案 0 :(得分:-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
}
这样,即使你的数据库被泄露,它也更安全;我相信没有人能够锻炼使用过的密码是什么,因为它只是原始密码的哈希值。