C# Использовать зашифрованный пароль для аутентификации Ssl по электронной почте - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь отправить несколько электронных писем с помощью электронной почты 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 ]

1 голос
/ 24 апреля 2020

Когда вы думаете об этом, это похоже на то, как браузер хранит ваш пароль, не так ли? Вплоть до февраля 2020 Google считал, что просто DPAPI достаточно для этого. Конечно, как упоминается в связанной статье, стало легко выбирать вредоносное ПО для кражи паролей. Технически это не особо важно, для чтения DPAPI требуется запустить для того же пользователя или для повышенных , поэтому у него уже есть доступ к другим интересным данным. Вы можете просто продолжать использовать DPAPI, действительно, Chrome теперь шифрует пароль вместо использования DPAPI, но при этом сохраняет ключ шифрования через DPAPI, с процедурой дешифрования, четко описанной в этом ответе StackOverflow , вредоносное ПО и инструменты паролей были обновлены всего через несколько дней после обновления Chrome.

Поэтому, если вы хотите добавить очень минимальное изменение, обычно достаточно использовать DPAPI, как он есть . Добавление другого шифрования только заставляет злоумышленника декомпилировать ваши приложения, чтобы отменить шифрование, и ваше приложение все равно утечет пароль повсюду. В противном случае, если вы абсолютно не хотите, чтобы пароль был раскрыт, создайте веб-сервис и скажите, чтобы ваше приложение вызывало сервис.

0 голосов
/ 24 апреля 2020

Может быть хорошим вариантом будет иметь данные такого рода на уровне среды, а не в коде. Вы можете попытаться сохранить пароль и адрес электронной почты в системной переменной среды, а затем извлечь их из своего кода. Таким образом, единственными, кто будет знать значения этих переменных, будет система, в которой выполняется код.

Это может быть полезно: https://docs.microsoft.com/en-us/dotnet/api/system.environment.getenvironmentvariable?view=netframework-4.8

...