Как хранить и получать учетные данные на окнах, используя C#
Я строю C# программу, которая будет работать на Win10. Я хочу отправлять электронные письма из этой программы (результаты расчетов), просто нажав кнопку. Я указал адрес электронной почты и тему: и т. Д. В свойствах C#, но я не хочу вводить открытый текст в любом месте программы, И я не хочу, чтобы пользователь вводил пароль для сервера каждый раз, когда отправляется почта.
Это может быть сделано?
Если да, то как (вообще)?
Я думал о том, чтобы поместить всю эту информацию электронной почты, включая зашифрованный пароль для сервера, в файл данных, который будет прочитан во время запуска программы.
Или, может быть, Win10 имеет средства для этого...
2 ответа
Вы можете использовать API управления учетными данными Windows. Таким образом, вы попросите пользователя ввести пароль только один раз, а затем сохраните пароль в диспетчере учетных данных Windows.
В следующий раз, когда ваше приложение запустится и ему нужно будет использовать пароль, оно будет считывать его из диспетчера учетных данных Windows. Можно использовать API управления учетными данными Windows напрямую, используя pinvoke ( credwrite, CredRead, пример здесь) или через обертку C# CredentialManagement.
Пример использования с помощью пакета Nuget CredentialManagement:
public class PasswordRepository
{
private const string PasswordName = "ServerPassword";
public void SavePassword(string password)
{
using (var cred = new Credential())
{
cred.Password = password;
cred.Target = PasswordName;
cred.Type = CredentialType.Generic;
cred.PersistanceType = PersistanceType.LocalComputer;
cred.Save();
}
}
public string GetPassword()
{
using (var cred = new Credential())
{
cred.Target = PasswordName;
cred.Load();
return cred.Password;
}
}
}
Я не рекомендую хранить пароли в файлах на клиентских компьютерах, даже если вы зашифруете пароль, вы, вероятно, вставите ключ дешифрования в код приложения, что не очень хорошая идея.
Только что выпустил небольшую библиотеку, совместимую с.net 45 и.net 4.6
https://github.com/Bhaal22/vaultmanager
Любые отзывы приветствуются.