直接回答我的问题,我已经阅读了有关注册用户时加密密码的信息。到目前为止,我能够使用PASSWORD('$PASS');
注册用户,其中$PASS
是用户密码。我的sql表details
如下:-
FNAME
LNAME
EMAIL
PASS // USED ENCRYPTION AS PASSWORD('$PASS'); HERE.
我不明白如何解密密码并在我的代码中使用进一步,我使用以下代码来解密密码,但它不起作用。
<?php
$EMAIL = $_POST['email'];
$PASS = $_POST['pass'];
mysql_connect('host', 'user', 'pass');
mysql_select_db('userdb');
$results = mysql_query(sprintf("SELECT FNAME,LNAME,EMAIL,PASS FROM `details`
WHERE PASS=PASSWORD('$PASS')",
mysql_real_escape_string($EMAIL))) or die(mysql_error());
while($row = mysql_fetch_assoc($results))
{$rows[1] = $row;}
if(!($_COOKIE['pass'] == $rows[1][PASS]))
//cookie is set while registering user , which is the decrypted(original) value of password.
{ die("Error occured"); }
else { echo "Password entered is correct"; }
////.....my further code here.
?>
它在页面上显示Error occured
,这意味着密码不正确。我还补充说,在数据库中加密密码之前,此代码工作正常。我是加密过程的新手,需要您的一点帮助,这将有助于我了解更多信息。提前谢谢。
您不加密密码,而是对其进行哈希处理。
关键是,您实际上并不需要用户密码,您只需要知道他们知道它。
例如,一个绝对糟糕的方法可能是一个简单的计数:例如
如果用户密码是"horse123",则可以将其存储为 8
。然后你只需数密码中的字母,如果它是8
,你就知道它是对的。
这意味着您永远不需要知道实际密码。
显然这很糟糕,因为有很多 8 个字符的密码!我们需要一些"碰撞"更少的东西。
相反,我们使用单向哈希函数。执行此操作的最常见方法是使用 MD5 哈希。(这不是最好的,但解释起来很简单(。有关如何实际执行此操作,请查看 http://www.openwall.com/phpass/。
对于简短而甜蜜的版本:
获取用户密码,然后执行以下操作:
$pass = md5('somerandomtextthatyouknow'.$_POST['password']);
然后,将其存储在您的数据库中。
当他们登录时,您再次执行相同的操作,并检查数据库中的哈希值。
这样,您永远不需要知道实际密码,密码可以随心所欲地使用,如果您的数据库被盗,哈希值对任何人都没有用(因为我们添加了该随机文本(。
所以,现在你明白了,请阅读:
http://www.openwall.com/phpass/
并且绝对阅读SQL注入和SQL准备语句,否则这一切都毫无意义!
您不应该加密密码。你应该散列它们。这样它们就无法解密。
您可以在此处阅读有关它的更多信息。
最好的解决方案是使用哈希代码,而不是使用加密和解密。
md5($pass)
- 给你32位唯一的哈希码
类似sha256(), hash()
...等
将这些哈希代码存储在数据库中的密码位置。
哈希代码是一种方式。因此,它对您的用户更安全。
单击此处获取使用 PHP 和 MYSQL 保护您的密码和登录访问的更全面方法