首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中用盐检查mysql加密值?

问如何在PHP中用盐检查mysql加密值?
EN

Stack Overflow用户
提问于 2013-05-23 09:05:13
回答 1查看 5.8K关注 0票数 3

对于我的网站,我使用这个MySQL函数将我的用户密码存储在数据库中:

代码语言:javascript
复制
ENCRYPT('password', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16)))

现在,为了让我的用户登录,我需要检查他们提供的密码和数据库中的值。

我假设它会像下面这样简单:

代码语言:javascript
复制
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版本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-23 09:14:22

ENCRYPT() (更为人所知的是crypt()函数)使用的盐作为散列的一部分存储,并且可以用作散列的一部分:

代码语言:javascript
复制
SELECT ... FROM users WHERE ... AND password = ENCRYPT('swordfish', password);

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

您可以(也应该)在PHP中执行相同的操作,方法是检查:

代码语言:javascript
复制
crypt($user_password, $hashed_password) == $hashed_password

请注意,crypt()不是一种特别安全的密码存储方法。详情请参考Secure hash and salt for PHP passwords。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16704051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档