对于我的网站,我使用这个MySQL函数将我的用户密码存储在数据库中:
ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))
现在我的用户需要登录,我需要检查他们提供的密码和数据库中的值。
我认为它会像这样容易:
SELECT user FROM users WHERE id = $id AND password = ENCRYPT('$password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))
然而,由于RAND()函数......
,显然这不起作用那么如何在PHP(或mysql)中重新创建此密码以使其与加密密码相匹配?我假设我需要使用crypt()或hash(),但老实说我不确定是应该使用PHP还是MySQL。
我使用的是MySQL 5.5版,PHP版本5.3
答案 0 :(得分:3)
ENCRYPT()
使用的盐(更好地称为crypt()
函数)存储为散列的一部分,可以用作散列的一部分:
SELECT ... FROM users WHERE ... AND password = ENCRYPT('swordfish', password);
(也就是说,如果用户输入的密码是“箭鱼”。我正在避免使用“密码”,因为它也是一个列名。)
您可以(并且应该)通过检查:
在PHP中执行相同的操作crypt($user_password, $hashed_password) == $hashed_password
请注意,crypt()
不是特别安全的密码存储方法。有关详细信息,请参阅Secure hash and salt for PHP passwords。