对于我的网站,我使用这个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。
我使用的是PHP5.5、MySQL 5.3版本
发布于 2013-05-23 09:14:22
ENCRYPT() (更为人所知的是crypt()函数)使用的盐作为散列的一部分存储,并且可以用作散列的一部分:
SELECT ... FROM users WHERE ... AND password = ENCRYPT('swordfish', password);(也就是说,如果用户输入的密码是"swordfish“。我避免使用"password“,因为它也是一个列名。)
您可以(也应该)在PHP中执行相同的操作,方法是检查:
crypt($user_password, $hashed_password) == $hashed_password请注意,crypt()不是一种特别安全的密码存储方法。详情请参考Secure hash and salt for PHP passwords。
https://stackoverflow.com/questions/16704051
复制相似问题