C#使用加密的密码进行电子邮件Ssl身份验证

时间:2020-04-24 07:42:34

标签: c# gmail networkcredentials

我正在尝试使用Gmail电子邮件发送多封电子邮件。

MailMessage mail = new MailMessage();
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

    mail.From = new MailAddress("gmail email ssl server");
    mail.To.Add("email to send to");
    mail.Subject = "Test Mail 2.0";
    mail.IsBodyHtml = true;
    mail.Body = body;

    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("email@email.com", "My Password");
    SmtpServer.EnableSsl = true;

    SmtpServer.Send(mail);

它运行良好,但是如您所知,C#代码是可检索的。您知道gmail将接受为密码的加密方法吗? 因此,我可以只在密码中存储密码,我的电子邮件仍然容易受到攻击,但比现在少得多。

2 个答案:

答案 0 :(得分:1)

当您考虑它时,就像浏览器存储密码的方式一样吗?直到February 2020为止,Google都认为普通DPAPI足以满足要求。当然,正如链接文章所提到的,窃取密码的恶意软件变得很容易。从技术上讲,这并不是一个很重要的问题,读取DPAPI需要运行as the same user or elevated ones,因此它已经可以访问其他有趣的数据。您可以继续使用DPAPI,实际上,Chrome现在已加密密码而不是使用DPAPI,但仍通过DPAPI保留了加密密钥,this StackOverflow answer中明确描述了解密程序,恶意软件和密码工具仅在几天后更新Chrome更新。

因此,如果您想添加非常小的更改,通常使用DPAPI as it is就足够了。添加其他加密只会迫使攻击者反编译您的应用以逆转加密,并且您的应用仍会泄漏密码。否则,如果您绝对不想泄露密码,请创建一个Web服务,然后告诉您的应用调用该服务。

答案 1 :(得分:0)

在环境级别而不是代码级别拥有此类数据可能是一个不错的选择。您可以尝试将密码和电子邮件存储在系统环境变量中,然后从代码中检索它。这样,唯一知道变量值的人就是您正在运行代码的系统。

这可能会有所帮助:https://docs.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariable?view=netframework-4.8