1

直接回答我的问题,我已经阅读了有关在注册用户时加密密码的信息。直到这里我能够通过使用用户密码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在页面上,这意味着密码不正确。我还补充说,在数据库中加密密码之前,此代码可以正常工作。我是加密过程的新手,需要您的帮助,这将帮助我了解更多信息。提前致谢。

4

4 回答 4

5

你不加密密码,你散列它们。

关键是,您实际上并不需要用户密码,您只需要知道他们知道它。

例如,一个绝对糟糕的方法可能是一个简单的计数:例如

如果用户密码是“horse123”,您可以将其存储为8. 然后你只需数一下密码中的字母,如果是8,你就知道它是对的。

这意味着您永远不需要知道实际密码。

显然这很糟糕,因为有很多 8 个字符的密码!我们需要一些“碰撞”较少的东西。

相反,我们使用一种方式的哈希函数。最常见的方法是使用 MD5 哈希。(这不是最好的,但很容易解释)。有关如何实际执行此操作,请查看http://www.openwall.com/phpass/

对于简短而甜蜜的版本:

获取用户密码,然后执行以下操作:

$pass = md5('somerandomtextthatyouknow'.$_POST['password']);

然后,将其存储在您的数据库中。

当他们登录时,您再次执行相同操作,并检查您的数据库中的哈希值。

这样,您永远不需要知道实际密码,密码可以任意长,如果您的数据库被盗,哈希对任何人都没有用(因为我们在随机文本中添加了)。

所以,现在你明白了,请阅读:

http://www.openwall.com/phpass/

并且绝对阅读 SQL 注入和 SQL 准备语句,否则这一切都毫无意义!

于 2013-09-29T10:52:19.177 回答
1

您不应该加密密码。你应该对它们进行哈希处理。这样他们就不能被解密。

你可以在这里阅读更多关于它的信息

于 2013-09-29T10:51:44.470 回答
0

最好的解决方案是使用 HASH 代码而不是使用加密和解密。

md5($pass)- 为您提供 32 位唯一哈希码

同样sha256(), hash()...等

将这些哈希码存储在您的数据库中的密码位置。

哈希码是一种方式。因此,它对您的用户来说更安全。

于 2013-09-29T10:59:11.427 回答
0

单击此处以更全面的方式使用 PHP 和 MYSQL 保护您的密码和登录访问

于 2013-12-22T18:50:18.060 回答