如何在mysql中解密密码

时间:2013-09-29 10:44:32

标签: php mysql encryption

直截了当地回答我的问题,我已经阅读了关于在注册用户时加密密码的问题。在这里,我可以使用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 个答案:

答案 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)

您不应该加密密码。你应该哈希它们。这样他们就无法解密。

You can read more about it here

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)