我使用SQL的PASSWORD()
函数加密密码。现在我正在寻找一种方法来获取密码,如果有人忘记了他/她的密码。
$user = "select * from users where email='$email' and password='PASSWORD($pass)'";
谢谢
永远不要以可以解密的方式存储密码。只需生成一个新密码。
类似:
UPDATE users SET `password` = 'PASSWORD(someSuper.Safe123Password!)' WHERE `id` = USERID
您无法直接恢复此密码,只能使用暴力攻击或使用彩虹表进行哈希。
PASSWORD()
是一种散列方法,因此无法解密为原始字符串http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html
所以你问题的答案
如果要加密/解密,可以使用AES_ENCRYPT
和AES_DECRYPT
方法http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt或者DES_ENCRYPT
和DES_DECRYPT
注意:出于安全考虑,存储可以解密的密码是不明智的,您最好设置一个新密码。或者在您的情况下,当用户忘记了他/她的密码,您可以生成一个随机字符串,并使用它作为密码在您的数据库中生成的密码可以邮寄给您的最终用户。
正如hd所指出的,您可以更好地使用生成的字符串作为最终用户的重置令牌。