【发布时间】:2013-09-29 10:44:31
【问题描述】:
直接回答我的问题,我已经阅读了有关在注册用户时加密密码的信息。直到这里我能够使用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,表示密码错误。我还补充说,在数据库中加密密码之前,此代码可以正常工作。我是加密过程的新手,需要您的帮助,这将帮助我了解更多信息。提前致谢。
【问题讨论】:
-
危险:您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
-
此外,仅根据密码进行选择是一个非常糟糕的主意。您也必须使用 WHERE 中的电子邮件地址!密码通常不是唯一的,因此在您的情况下,用户最终可能会登录错误的帐户。
-
PASSWORD() 执行的加密是单向的(不可逆的)。
-
@MarkBaker:根据他的代码,他只是想比较一下,只是在他的问题中使用了非常糟糕的措辞。
标签: php mysql encryption