private void decryptMsgBtn_Click(object sender, EventArgs e) { var userId = StudMail.UserId; var msg = CurrentLetter; var books = DBRSABooks.GetBooks(DBConnection.Connection, userId); var body = string.IsNullOrEmpty(msg.TextBody) ? msg.HtmlBody : msg.TextBody; var decryptedTxt = ""; bool isFound = false; try { foreach (var book in books) { if (book.Email == msg.From[0].ToString()) { decryptedTxt = MailHelper.ReturnMsg(body, book.OwnPrivate); if (decryptedTxt != null) { SaveMsgLocal(decryptedTxt); isFound = true; } break; } } MessageBox.Show(isFound ? decryptedTxt : body, "Расшифрованное сообщение"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Непредвиденная ошибка"); } }
private void removeKeysBtn_Click(object sender, EventArgs e) { for (int i = 0; i < keysTable.Rows.Count; i++) { var selected = (bool)keysTable.Rows[i].Cells["selectedKeyCol"].EditedFormattedValue; var email = (string)keysTable.Rows[i].Cells["emailCol"].Value; var userId = StudMail.UserId; if (selected) { DBRSABooks.Remove(DBConnection.Connection, email, userId); } } updateBooksWorker.RunWorkerAsync(); }
private void updateBooksWorker_DoWork(object sender, DoWorkEventArgs e) { e.Result = DBRSABooks.GetBooks(DBConnection.Connection, StudMail.UserId); }
private void addKeysBtn_Click(object sender, EventArgs e) { var email = keysEmailTxt.Text.Trim(' '); var privateKey = keysPrivateTxt.Text.Trim(' '); var publicKey = keysPublicTxt.Text.Trim(' '); var privateECPKey = keysPrivateSignTxt.Text.Trim(' '); var publicECPKey = keysPublicSignTxt.Text.Trim(' '); var remoteKey = keysRemoteTxt.Text.Trim(' '); var remoteECPKey = keysRemoteSignTxt.Text.Trim(' '); RSABookInfo book; if (string.IsNullOrEmpty(email)) { checkInputPrv.SetError(keysEmailTxt, "Заполните данное поле"); return; } if (string.IsNullOrEmpty(privateKey)) { checkInputPrv.SetError(keysPrivateTxt, "Заполните данное поле"); return; } if (string.IsNullOrEmpty(publicKey)) { checkInputPrv.SetError(keysPublicTxt, "Заполните данное поле"); return; } if (string.IsNullOrEmpty(privateECPKey)) { checkInputPrv.SetError(keysPrivateSignTxt, "Заполните данное поле"); return; } if (string.IsNullOrEmpty(publicECPKey)) { checkInputPrv.SetError(keysPublicSignTxt, "Заполните данное поле"); return; } if (string.IsNullOrEmpty(remoteKey)) { checkInputPrv.SetError(keysRemoteTxt, "Заполните данное поле"); return; } if (string.IsNullOrEmpty(remoteECPKey)) { checkInputPrv.SetError(keysRemoteSignTxt, "Заполните данное поле"); return; } book = new RSABookInfo() { UserId = StudMail.UserId.ToString(), Email = email, OwnPrivate = privateKey, OwnPublic = publicKey, OwnPrivateECP = privateECPKey, OwnPublicECP = publicECPKey, EmailPublic = remoteKey, EmailPublicECP = remoteECPKey }; if (!DBRSABooks.Add(DBConnection.Connection, book)) { checkInputPrv.SetError(keysEmailTxt, "Данная запись уже существует"); return; } updateBooksWorker.RunWorkerAsync(); }
// TODO: private void letterSendBtn_Click(object sender, EventArgs e) { lock (MailClient.ObjLock) { if (MailClient.CurrentNetwork == NetworkStatus.Disconnected) { MessageBox.Show("Отсутствует интернет! Отправка письма невозможна!"); return; } } // Зашифровать текст сообщения TripleDES // Получить ключ и вектор сообщения TripleDES // Зашифровать ключ при помощи RSA и получить ключи // Получить ЭЦП и ключи // Сформировать конечную строку - зашифрованный текст&зашифрованный ключ&вектор&ЭЦП // Сформировать сообщение MimeMessage // Отправить сообщение на сервер // Сохранить сообщение в БД в зашифрованном виде var msg = new MimeMessage(); var to = receiverEmailTxt.Text.Trim(); var subject = themeSendTxt.Text.Trim(); var body = msgSendTxt.Text.Trim(); var receivers = to.Split(';'); var userId = StudMail.UserId; var books = DBRSABooks.GetBooks(DBConnection.Connection, userId); if (string.IsNullOrEmpty(to)) { checkInputPrv.SetError(receiverEmailTxt, "Заполните данное поле"); return; } try { msg.From.Add(new MailboxAddress(StudMail.CurrentUser.Email)); foreach (var item in receivers) { msg.To.Add(new MailboxAddress(item)); } msg.Subject = subject; var found = false; // Находим для каждого адресата свой ключ foreach (var receiver in msg.To) { if (!isEncryptMsg) { var mailMsg = MailHelper.GenMsg(msg, body, currentPaths); if (StudMail.SendLetter(mailMsg)) { MessageBox.Show($"Сообщение отправлено адресату: {receiver.ToString()}"); } else { MessageBox.Show($"Не удалось отправить сообщение адресату: {receiver.ToString()}"); } } else { foreach (var book in books) { if (book.Email == receiver.ToString()) { if (book.EmailPublic != "") { var mailMsg = MailHelper.GenEncryptedMsg(msg, body, currentPaths, book); if (StudMail.SendLetter(mailMsg)) { MessageBox.Show($"Сообщение отправлено адресату: {receiver.ToString()}"); } else { MessageBox.Show($"Не удалось отправить сообщение адресату: {receiver.ToString()}"); } found = true; } // Нужно ещё записать в БД в зашифрованном виде, но не хватает uid break; } } if (!found) { MessageBox.Show($"Вы не имеете публичного ключа {receiver.ToString()}"); } } } } catch (Exception err) { MessageBox.Show("Произошла непредвиденная ошибка\n" + err.Message); } }