расшифровка пароля aspnet_membership через PHP - PullRequest
0 голосов
/ 28 августа 2018

Я потратил лучшую половину дня, пытаясь выяснить проблему, с которой столкнулся, и, похоже, я зашел в тупик.

У меня есть приложение ASP (нет доступа к реальному коду, только база данных), в котором пароли пользователей хранятся в столбце aspnet_membership> Password, в нем также есть соль.

У меня также есть копия файла ключа компьютера, который, как я понимаю, содержит ключи, необходимые для расшифровки пароля?

 <machineKey validationKey="**validation key**" decryptionKey="**decryption key**" validation="SHA1" decryption="AES"/>

Я пробовал несколько разных способов сделать это, с открытым ssl, с разными библиотеками и т. Д. Однако мне, кажется, не хватает знаний, когда дело доходит до этого. В настоящее время я пытаюсь использовать библиотеку https://github.com/phpseclib/phpseclib для расшифровки пароля:

$cipher = new AES(); // could use AES::MODE_CBC
        // keys are null-padded to the closest valid size
        // longer than the longest key and it's truncated
        //$cipher->setKeyLength(128);
        $cipher->setKey(**decrypt key**);
        // the IV defaults to all-NULLs if not explicitly defined
        $cipher->setIV($salt);

        echo $cipher->decrypt($password);

Однако, как бы я ни пытался это сделать, я получаю либо случайное возвращение, либо ложь. У меня очень ограниченный объем информации о версии AES, запущенной в приложении ASP, или любая другая информация о шифровании. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 29 августа 2018

Привет. Этот MachineKey не имеет никакого отношения к Salt, соль генерируется кодом во время выполнения с использованием предоставленного пароля.

.NET Framework, использующий Rfc2898DeriveBytes для шифрования Как то так

using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(password, 16, 1000))
        {
            salt = rfc2898DeriveByte.Salt;
            bytes = rfc2898DeriveByte.GetBytes(32);
        }
...