我构建了一个要在 Windows 10 上运行的 C# 程序。我想只需按一个按钮即可从该程序发送电子邮件(计算结果)。我把from:
电子邮件地址和subject:
等,但我不想在程序中的任何地方放置明文密码,并且我不希望用户每次发送邮件时都必须输入服务器的密码。
可以吗?
如果是这样,(通常)如何?
我正在考虑将所有电子邮件信息(包括服务器的加密密码)放入数据文件中,以便在程序启动期间读取。
或者 Windows 10 可能有这样的功能......
您可以使用 Windows 凭据管理 API。这样,您只需询问用户一次密码,然后将密码存储在 Windows 凭据管理器中。
下次您的应用程序启动并且需要使用密码时,它将从 Windows 凭据管理器中读取该密码。可以直接使用 Windows Credential Management APIP/Invoke http://en.wikipedia.org/wiki/Platform_Invocation_Services (信用写入 http://www.pinvoke.net/default.aspx/advapi32.credwrite, CredRead http://www.pinvoke.net/default.aspx/advapi32/CredRead%20.html, 例子在这里 https://stackoverflow.com/questions/22435561/encrypting-credentials-in-a-wpf-application) 或通过 C# 包装器凭证管理 https://www.nuget.org/packages/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;
}
}
}
我不建议将密码存储在客户端计算机上的文件中。即使您对密码进行加密,您也可能会将解密密钥嵌入到应用程序代码中,这不是一个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)