Суть в том, чтобы создать пользовательский провайдер аутентификации FTP .Для этого нужно наследовать от интерфейса IFtpAuthenticationProvider
и затем зарегистрировать эту сборку в GAC.После этого сборка должна быть зарегистрирована в настройках FTP IIS.
Для этого мне нужно использовать базу данных, в которой хранится информация о моем пользователе в базе данных от пользовательских провайдеров членства и ролей, которые мы разработали.ранее.Таким образом, это означает, что я должен использовать файл локальной библиотеки классов app.config
и читать его с ConfigurationManager.OpenMappedExeConfiguration()
.Оттуда я читаю строки подключения и даже могу динамически предоставлять их классам Linq-To-Sql .Никаких проблем.
Далее я пытаюсь создать класс, который наследуется от SqlMembershipProvider , чтобы я мог использовать его собственную систему для расшифровки пароля для пользователя.Но проблема в том, что он должен прочитать machineKey
значения из конфигурации.Единственный способ предоставить пользовательскую конфигурацию SqlMembershipProvider - это метод Initialize
(который в любом случае не предназначен для его использования в нашем коде).Но все равно я попытался и потерпел неудачу.Я смог предоставить ему пользовательские настройки членства, но не настройки machineKey
.
Итак, я решил пойти радикально.Я сказал: у меня есть decryptionKey
из machineKey
, поэтому я попытаюсь расшифровать пароль вручную.
Пока я пытался использовать RijndaelManaged
:
private string UnEncodePassword(string encodedPassword, string secretKey)
{
string password = encodedPassword;
var keyBytes = new byte[16];
var secretKeyBytes = Encoding.UTF8.GetBytes(secretKey);
Array.Copy(secretKeyBytes, keyBytes, Math.Min(keyBytes.Length, secretKeyBytes.Length));
RijndaelManaged rm = new RijndaelManaged
{
Mode = CipherMode.CBC,
Padding = PaddingMode.PKCS7,
KeySize = 128,
BlockSize = 128,
Key = keyBytes,
IV = keyBytes
};
var encryptedBytes = Convert.FromBase64String(encodedPassword);
password = Encoding.UTF8.GetString(Decrypt(encryptedBytes, rm));
return password;
}
Я отчасти осознаю, что здесь снимаю пробелы, так как я не уверен, какой вид заполнения используется, и, что важнее, даже если бы я мог, я не выбрал правильный IV.Лучшее, что я сделал до сих пор, - это получил какой-то хреновый ответ, вроде: �21l� <�� (� \ t��]. </p>
Так что мне нужны некоторые указатели. Даже предложения о том, как справиться с этимприветствуются проблемы с другой точки зрения.
РЕДАКТИРОВАТЬ:
Просто чтобы сделать вещи немного более понятными. Я не пытаюсь взломать пароль или что-нибудь. Яу меня есть пароль, и у меня есть decryptionKey и т. д. Я просто хочу найти способ зашифровать / расшифровать его, чтобы я мог выполнить проверку пользователя.
Я полностью осознаю, что шифрование / дешифрование паролей не лучший подход впервое место, но есть причины, почему это делается именно так.