Eri*_*rik 14 c# credentials credential-manager
我构建了一个C#程序,在Win10上运行.我想通过按下按钮从该程序发送电子邮件(计算结果).我把来自:电子邮件地址和主题:等等放在C#属性中,但是我不想在程序的任何地方放置明文密码,而且我不希望用户输入密码每次发送邮件时为服务器.
可以这样做吗?
如果是这样,如何(一般)?
我正在考虑将所有电子邮件信息(包括服务器的加密密码)放在数据文件中,以便在程序启动期间读取.
或许Win10有一个设施...
Krz*_*cki 22
您可以使用Windows Credential Management API.这样,您只需要用户输入一次密码,然后将密码存储在Windows凭据管理器中.
下次启动应用程序并需要使用密码时,它将从Windows凭据管理器中读取它.可以使用pinvoke(credwrite,CredRead,这里的示例)或通过C#包装器CredentialManagement直接使用Windows Credential Management API .
使用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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不建议将密码存储在客户端计算机上的文件中,即使您加密密码,您也可能将解密密钥嵌入应用程序代码中,这不是一个好主意.