如何存储和使用C#在Windows上检索凭证

问题描述 投票:13回答:1

我建一个C#程序,可以在Windows上运行10我想只要按下一个按钮,从这项计划中(计算结果)发送电子邮件。我把from:电子邮件地址和subject:等在C#中的属性,但我不希望把明文密码在程序的任何地方,我不希望用户必须在密码输入每一个邮件发送时间服务器。

可以在做什么?

如果是这样,怎么样(通常情况下)?

我的想法是把所有的电子邮件信息,包括在数据文件中的服务器的加密口令的程序启动时读取的。

或者,也许视窗10有一个设施...

c# credentials credential-manager
1个回答
21
投票

您可以使用Windows凭据管理API。这样,你会问密码的用户只有一次,然后存储在Windows凭据管理器中的密码。

下一次你的应用程序启动时,它需要使用它会从Windows证书管理读它的密码。一个可以使用Windows凭据管理API直接使用P/InvokecredwriteCredReadexample 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;
        }
    }
}

我不建议在文件存储在客户机上的密码。即使你加密密码,你可能会嵌入在应用程序代码这是不是一个好主意解密密钥。

© www.soinside.com 2019 - 2024. All rights reserved.