我建一个C#程序,可以在Windows上运行10我想只要按下一个按钮,从这项计划中(计算结果)发送电子邮件。我把from:
电子邮件地址和subject:
等在C#中的属性,但我不希望把明文密码在程序的任何地方,我不希望用户必须在密码输入每一个邮件发送时间服务器。
可以在做什么?
如果是这样,怎么样(通常情况下)?
我的想法是把所有的电子邮件信息,包括在数据文件中的服务器的加密口令的程序启动时读取的。
或者,也许视窗10有一个设施...
您可以使用Windows凭据管理API。这样,你会问密码的用户只有一次,然后存储在Windows凭据管理器中的密码。
下一次你的应用程序启动时,它需要使用它会从Windows证书管理读它的密码。一个可以使用Windows凭据管理API直接使用P/Invoke(credwrite,CredRead,example here)或通过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;
}
}
}
我不建议在文件存储在客户机上的密码。即使你加密密码,你可能会嵌入在应用程序代码这是不是一个好主意解密密钥。