如何解密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);
需要帮助
答案 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()来解密密码。