繁体   English   中英

解密php中的密码

[英]Decrypt password in php

如何解密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);

需要帮忙

加密(或散列)密码背后的想法是,这是一种单向操作。 不太像切碎,但这就是想法。 如果采用完全相同的输入并将其切碎,则应该获得完全相同的输出。 您可能无法从中重构输入,但是可以通过查看输出来确认某人给了您正确的输入。

原则上已经知道某些弱算法会被黑客入侵,您所要求的是不可能的。

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

永远不要存储纯文本(或弱加密)密码。 只是问领英...

您不只是简单地解密密码。 应该将其散列,这意味着它是一种单向加密。

如果要更改密码哈希实现,请使用以下方法。

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

如果您正在使用新的本机密码哈希函数 (PHP版本> = 5.5),则可以使用password_needs_rehash 如果您使用较低的PHP版本,但仍> = 5.3.7,则可以使用userland实现将相同的API应用于密码哈希函数。

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

首先,您通过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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM