Я потратил лучшую половину дня, пытаясь выяснить, какая у меня проблема, и, похоже, я зашел в тупик.
У меня есть приложение 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, или любая другая информация о шифровании. Любая помощь будет оценена!
Привет Этот MachineKey не имеет ничего общего с Salt, соль генерируется кодом во время выполнения с использованием предоставленного пароля.
.NET Framework с использованием Rfc2898DeriveBytes для шифрования
Что-то вроде этого
using (Rfc2898DeriveBytes rfc2898DeriveByte = new Rfc2898DeriveBytes(password, 16, 1000))
{
salt = rfc2898DeriveByte.Salt;
bytes = rfc2898DeriveByte.GetBytes(32);
}
Других решений пока нет …