作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
对于我的网站,我使用这个 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 版
最佳答案
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了解详情。
关于php - 如何在 PHP 中用盐检查 mysql 加密值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16704051/
我是一名优秀的程序员,十分优秀!