直截了当地回答我的问题,我已经阅读了关于在注册用户时加密密码的问题。在这里,我可以使用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
,这意味着密码不正确。我还补充一点,这个代码在加密数据库密码之前工作正常。我是加密过程的新手,需要你的帮助,这将有助于我了解更多信息。提前谢谢。
答案 0 :(得分:5)
你不加密密码,你可以哈希。
关键是,你实际上并不需要用户密码,你只需知道他们就知道了。
作为一个例子,一个绝对可怕的方法可能是一个简单的计数:例如。
如果用户密码为'horse123',则可以将其存储为8
。然后你只计算密码中的字母,如果它是8
,你知道它是正确的。
这意味着您永远不需要知道实际的密码。
显然这很糟糕,因为有很多8个字符的密码!我们需要一些没有“碰撞”的东西。
相反,我们使用单向散列函数。最常见的方法是使用MD5哈希。 (这不是最好的,但解释起来很简单)。有关如何实际执行此操作,请查看http://www.openwall.com/phpass/。
简短而甜蜜的版本:
获取用户密码,并执行以下操作:
$pass = md5('somerandomtextthatyouknow'.$_POST['password']);
然后,将其存储在您的数据库中。
当他们登录时,您再次执行相同的操作,并检查数据库中的哈希值。
这样,您永远不需要知道实际的密码,密码可以随意使用,如果您的数据库被盗,则哈希对任何人都没用(因为我们添加了随机文本)。 / p>
所以,现在您明白了,请阅读:
http://www.openwall.com/phpass/
并且完全阅读SQL注入和SQL预处理语句,否则这一点都没有意义!
答案 1 :(得分:1)
您不应该加密密码。你应该哈希它们。这样他们就无法解密。
答案 2 :(得分:0)
最佳解决方案是使用HASH代码而不是使用加密和解密。
md5($pass)
- 为您提供32位唯一哈希码
同样sha256(), hash()
......等
将这些哈希码存储在密码所在的数据库中。
哈希代码是一种方式。因此,它对您的用户来说更安全。
答案 3 :(得分:0)