如何使用MysqliDB加密/解密密码

问题描述:

有没有办法使用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

我不熟悉该库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