【问题标题】:C# Use crypted password for email Ssl authentificationC# 使用加密密码进行电子邮件 SSL 身份验证
【发布时间】:2020-04-24 07:42:34
【问题描述】:

我正在尝试使用 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 将接受作为密码的加密方法吗? 所以我可以在代码中存储,只有加密的密码,我的电子邮件仍然容易受到攻击,但比现在少很多。

【问题讨论】:

    标签: c# gmail networkcredentials


    【解决方案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 服务并告诉您的应用调用该服务。

    【讨论】:

    • 非常感谢!它非常完美,并且在我的软件的其他部分帮助了我!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 2018-09-03
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2017-01-18
      • 2019-07-13
      相关资源
      最近更新 更多