два типа данных приходят к разуму, Tuple<string, string>
или KeyValuePair<string, string>
в зависимости от их предполагаемого использования:
public List<Tuple<string, string>> QueryXmlUserLogin()
{
var data = from item in XDocumentObj.Descendants("User_Data")
select Tuple.Create(item.Element("user").Value, item.Element("password").Value);
return data.ToList();
}
Используя эти, однако, часто может скрыть смысл возвращаемых типов. Поскольку метод является открытым, вы можете быть лучше создать новый класс для работы:
public class UserCredentials
{
public string Username {get; set; }
public string Password {get; set; }
}
public List<UserCredentials> QueryXmlUserLogin() ...
Как и в стороне (на основе имен переменных), хранящие пароли в незашифрованном виде не должны быть сделаны. Извиняюсь, если я неправильно интерпретирую переменные, или ваш пример надуман, но если кто-то наткнется на это сообщение - хэш пароля (и уникальная соль) должен храниться, а не пароль в виде открытого текста.
Просто сторона идеи, глядя на имена переменных, не хранить пароли, не так ли? – oleksii
Я делаю, но файл, который contais XDocument зашифрован – kmxillo
, тогда это не самая лучшая идея в безопасности, на самом деле не имеет значения, шифруете ли вы файл или даже шифруете каждый пароль или и то, и другое. Это значительно большой вектор для атаки, где хакер получает ваш ключ шифрования и расшифровывает файл/пароли. Более безопасный подход заключается в сохранении генерируемого сильного хэша пароля. Таким образом, вы вообще не храните пароли, а только необратимый «мусор». Каждый пользователь регистрируется, вы повторно применяете хеш к предоставленному паролю и сравниваете его с сохраненным хэшем. Но это зависит от того, насколько вы заботитесь о безопасности этого приложения. – oleksii