在php中解密密码

时间:2014-01-20 12:42:06

标签: php mysql sql-server magento

如何解密ms-SQL数据库中的纯文本密码?

$encrypted_password="k??aU?????y-??N???tDRz????{?4R???G?aS4t?T";  
$salt = "611233880";

所以我需要解密密码,以便我使用md5加密插入其他数据库。

我使用了这段代码,但没有成功

$iv2 = '';
 for($i=0;$i<16;$i++){
    $iv2 .= "\0";
 }
 $plain_text_CBC = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, $encrypted_password, MCRYPT_MODE_CBC, $iv2);
 var_dump($plain_text_CBC);
 $plaintext = openssl_decrypt($encrypted_password, 'AES-256-CBC', $salt, 0, $iv2);
 var_dump($plaintext);

需要帮助

4 个答案:

答案 0 :(得分:2)

加密(或散列)密码背后的想法是它是单向操作。不太喜欢切碎,但这就是想法。如果您使用完全相同的输入并将其粉碎,则应获得完全相同的输出。您可能无法从中重建输入,但您可以通过查看输出来确认某人为您提供了正确的输入。

一些弱算法被认为是被黑客入侵原则上你所要求的是不可能的。

应该没有理由解密。您始终可以执行两次散列操作 - 首先使用旧算法,然后使用新算法 - 然后与数据库中的条目进行比较。

永远不会存储明文(或弱加密)密码。请问LinkedIn ......

答案 1 :(得分:2)

您不是简单地解密密码。它应该被散列,这意味着它是单向加密。

如果您想更改密码哈希实现,可以使用以下方法。

当用户正在登录时,您可以使用明文密码。因此,您必须放置代码以使用新算法重新密码。

如果您使用的是新的原生password hashing functions(PHP版本&gt; = 5.5),那么您可以使用password_needs_rehash。如果您的PHP版本较低但仍然> = 5.3.7,则可以使用userland implementation获取密码散列函数的相同API。

因此,当用户尝试登录并且密码需要重新散列时,请检查散列是否与旧散列函数匹配,然后创建新散列并将其保存到数据库。随着时间的推移,您将能够迁移大多数用户,然后您可以考虑使用强制密码重置迁移其余用户库的解决方案,如果他们在迁移时间范围内从未登录过。

答案 2 :(得分:1)

首先,您通过2种不同的算法加密数据。为什么?一种算法就足够了。

答:您无法解密旧密码。

解决方案:您应该将写入的数据加密到密码字段中,并将结果与​​数据库中的数据进行比较。如果它们相同,您将通过密码检查。

例如:

$login = mysqli_real_escape_string($_POST['login']);
$password = mysqli_real_escape_string($_POST['password']);
$password_hash = md5($input); // you can use there any other algorithm, just example

// make next query and control result
$sql = 'select count(id) from users where login = \'$login\' and password = \'$password_hash\'';

// now if there are 1 row with this login and same password hash let user log in to your site

答案 3 :(得分:-1)

如果您在MVC结构中编写代码,则可以使用函数n_decrypt()来解密密码。