如何在 mysql 中解密密码


How to decrypt password in mysql

直接回答我的问题,我已经阅读了有关注册用户时加密密码的信息。到目前为止,我能够使用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 保护您的密码和登录访问的更全面方法