private void recryptFile() { DoublePasswordForm pwdForm1, pwdForm2 = null; bool isSuccess = false; do { pwdForm1 = new DoublePasswordForm(1); pwdForm1.ShowDialog(); if (pwdForm1.resultText == null) { return; } if (pwdForm1.resultText.Length < 6) { MessageBox.Show("Извините, но введённый текст настолько мал, что не может являться паролем", "Шифрование", MessageBoxButtons.OK, MessageBoxIcon.Stop); continue; } if (pwdForm1.fromFile) { break; } pwdForm2 = new DoublePasswordForm(2); pwdForm2.ShowDialog(); if (pwdForm2.cancel) { pwdForm1.clearResultText(); return; } if (!String.IsNullOrEmpty(pwdForm2.resultText) && pwdForm1.resultText != pwdForm2.resultText) { pwdForm1.clearResultText(); pwdForm2.clearResultText(); if (MessageBox.Show("Введённые пароли не равны друг другу\r\nХотите попробовать ещё раз?", "Шифрование", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { return; } } else { isSuccess = true; } }while (!isSuccess); byte[] newKey1; Form1.GetKeyByPassword(pwdForm1, out newKey1, 10); pwdForm1.clearResultText(); pwdForm2.clearResultText(); var sha = new SHA3(0); var newKey = new PasswordSecure(newKey1); foreach (var record in records) { record.Value.pwd = crypt(decrypt(record.Value.pwd), newKey); record.Value.crypt = crypt(decrypt(record.Value.crypt), newKey); } ClearKey(); key = newKey; recordsToFile(); }
public static bool GetPasswordAndDecryptFile(Form1.OpenFileDialogContext context, out FileInfo fi, out byte[] bt, bool AcceptEmptyPassword = false, bool noMsg = false, bool keyFromFile = false, onEnd ended = null) { fi = new FileInfo(context.dialog.FileName); int countOfTryes = -1; bt = null; DoublePasswordForm pwdForm1, pwdForm2 = null; do { countOfTryes++; pwdForm1 = new DoublePasswordForm(1, fi.Name); pwdForm1.ShowDialog(); if (pwdForm1.resultText == null) { return(false); } if (pwdForm1.fromFile) { break; } if (AcceptEmptyPassword && pwdForm1.resultText.Length == 0) { return(true); } if (!AcceptEmptyPassword && pwdForm1.resultText.Length < 6) { MessageBox.Show("Извините, но введённый текст настолько мал, что не может являться паролем", "Шифрование", MessageBoxButtons.OK, MessageBoxIcon.Stop); continue; } if (fi.Length > 1024 * 1024 || countOfTryes > 1) { pwdForm2 = new DoublePasswordForm(2, fi.Name, true); pwdForm2.ShowDialog(); if (pwdForm2.cancel) { pwdForm1.clearResultText(); return(false); } if (!String.IsNullOrEmpty(pwdForm2.resultText) && pwdForm1.resultText != pwdForm2.resultText) { pwdForm1.clearResultText(); pwdForm2.clearResultText(); if (MessageBox.Show("Введённые пароли не равны друг другу\r\nХотите попробовать ещё раз?", "Шифрование", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { return(false); } continue; } pwdForm2.clearResultText(); } break; }while (true); GC.Collect(); if (ended == null) { GetPasswordAndDecryptFile(fi, out bt, pwdForm1); if (bt == null) { if (!noMsg) { if (MessageBox.Show("Расшифровка файла '" + fi.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop) == System.Windows.Forms.DialogResult.Retry) { return(false); // continue; } else { return(false); } } else { return(false); } } return(true); } else { var fif = fi; #if forLinux { byte[] bd; GetPasswordAndDecryptFile(fif, out bd, pwdForm1); ended(fif, bd); if (bd == null) { if (!noMsg) { MessageBox.Show("Расшифровка файла '" + fif.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // == System.Windows.Forms.DialogResult.Retry } } } #else ThreadPool.QueueUserWorkItem (delegate { byte[] bd; GetPasswordAndDecryptFile(fif, out bd, pwdForm1); ended(fif, bd); if (bd == null) { if (!noMsg) { MessageBox.Show("Расшифровка файла '" + fif.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // == System.Windows.Forms.DialogResult.Retry } } } ); #endif return(true); } }
void cnt_closedEventDecrypt(Form1.OpenFileDialogContext context, bool isOK) { if (!isOK) { return; } toStart: DoublePasswordForm pwdForm1, pwdForm2 = null; bool isSuccess = false; do { pwdForm1 = new DoublePasswordForm(1, Path.GetFileName(context.dialog.FileName)); pwdForm1.ShowDialog(); if (pwdForm1.resultText == null) { return; } if (pwdForm1.resultText.Length < 6) { MessageBox.Show("Извините, но введённый текст настолько мал, что не может являться паролем", "Шифрование", MessageBoxButtons.OK, MessageBoxIcon.Stop); continue; } if (pwdForm1.fromFile) { break; } pwdForm2 = new DoublePasswordForm(2, Path.GetFileName(context.dialog.FileName)); pwdForm2.ShowDialog(); if (pwdForm2.cancel) { pwdForm1.clearResultText(); return; } if (!String.IsNullOrEmpty(pwdForm2.resultText) && pwdForm1.resultText != pwdForm2.resultText) { pwdForm1.clearResultText(); pwdForm2.clearResultText(); if (MessageBox.Show("Введённые пароли не равны друг другу\r\nХотите попробовать ещё раз?", "Шифрование", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { return; } } else { isSuccess = true; } }while (!isSuccess); ClearKey(); ClearWindow(); byte[] key1; Form1.GetKeyByPassword(pwdForm1, out key1, 22); pwdForm1.clearResultText(); pwdForm2.clearResultText(); var sha = new SHA3(0); var fi = new FileInfo(context.dialog.FileName); fileName = fi.FullName; if (!fi.Exists) { var newBytes = sha.multiCryptLZMA(new byte[0], key1, null, 12, false, 0, SHA3.getHashCountForMultiHash() - 8); File.WriteAllBytes(fileName, newBytes); } try { var openFile = File.ReadAllBytes(fileName); var decryptedFile = sha.multiDecryptLZMA(openFile, key1); if (decryptedFile == null) { MessageBox.Show("Файл расшифровать не удалось"); BytesBuilder.BytesToNull(key1); goto toStart; } this.key = new PasswordSecure(key1); var str = Encoding.UTF32.GetString(decryptedFile); BytesBuilder.ToNull(openFile); BytesBuilder.ToNull(decryptedFile); GetRecordsFromFile(str); BytesBuilder.ClearString(str); } catch (Exception e) { MessageBox.Show("Расшифрование не удалось! " + e.Message, "Расшифрование не удалось", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } SetTagsAndMainTags(); }
void cnt_closedEvent(Form1.OpenFileDialogContext context, bool isOk) { if (!isOk) { return; } DoublePasswordForm pwdForm1, pwdForm2 = null; bool isSuccess = false; do { pwdForm1 = new DoublePasswordForm(1, Path.GetFileName(context.dialog.FileName)); pwdForm1.ShowDialog(); if (pwdForm1.resultText == null) { return; } if (pwdForm1.resultText.Length < 6) { MessageBox.Show("Извините, но введённый текст настолько мал, что не может являться паролем", "Шифрование", MessageBoxButtons.OK, MessageBoxIcon.Stop); continue; } if (pwdForm1.fromFile) { break; } pwdForm2 = new DoublePasswordForm(2, Path.GetFileName(context.dialog.FileName), true); pwdForm2.ShowDialog(); if (pwdForm2.cancel) { pwdForm1.clearResultText(); return; } if (/*!String.IsNullOrEmpty(pwdForm2.resultText) && */ pwdForm1.resultText != pwdForm2.resultText) { pwdForm1.clearResultText(); pwdForm2.clearResultText(); if (MessageBox.Show("Введённые пароли не равны друг другу\r\nХотите попробовать ещё раз?", "Шифрование", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { return; } } else { isSuccess = true; } }while (!isSuccess); if (pwdForm2 != null) { pwdForm2.clearResultText(); } new FormCrypt(pwdForm1, context.dialog.FileName).Show(); }