3

对于我的网站,我使用这个 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 版

4

1 回答 1

3

ENCRYPT()由(更好地称为函数)使用的盐crypt()存储为散列的一部分,并且可以用作散列的一部分:

SELECT ... FROM users WHERE ... AND password = ENCRYPT('swordfish', password);

(也就是说,如果用户输入的密码是“swordfish”。我避免使用“密码”,因为它也是一个列名。)

您可以(并且应该)通过检查在 PHP 中做同样的事情:

crypt($user_password, $hashed_password) == $hashed_password

请注意,这crypt()不是一种特别安全的密码存储方法。有关详细信息,请参阅PHP 密码的安全哈希和盐。

于 2013-05-23T01:14:21.820 回答