void cnt_closedEventDecrypt(Form1.OpenFileDialogContext context, bool isOK) { if (!isOK) { return; } FileInfo fi; byte[] bt; GetPasswordAndDecryptFile(context, out fi, out bt, false, false, false, new onEnd(DecryptFile)); }
private void CheckCrypt() { var Success = false; FileInfo fi; byte[] bytes = null, bt; var cnt = new Form1.OpenFileDialogContext(this); cnt.dialog.FileName = CryptFileName; Form1.GetPasswordAndDecryptFile(cnt, out fi, out bt, false, true); if (bt != null) { if (File.Exists(FileName)) { bytes = File.ReadAllBytes(FileName); Success = BytesBuilder.Compare(bytes, bt); BytesBuilder.ToNull(bytes); BytesBuilder.ToNull(bt); } } if (Success && bytes != null) { MessageBox.Show("Расшифровка файла произошла успешно", "Проверка шифрования", MessageBoxButtons.OK, MessageBoxIcon.Information); } else if (Success) { MessageBox.Show("Проверка расшифровки полностью невозможна, так как не найден исходный файл\r\nРасшифровка файла произошла успешно", "Проверка шифрования", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { MessageBox.Show("Файл не удалось расшифровать правильно с этим паролем/ключом", "Проверка шифрования", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
protected void passwordInFile(Form1.OpenFileDialogContext cnt, bool isOk) { if (!isOk) { try { if (this.InvokeRequired) { this.Invoke(vd); } else { vd(); } } catch { vd(); } return; } FileInfo fi; byte[] bt; if (!Form1.GetPasswordAndDecryptFile(cnt, out fi, out bt, false, false, true)) { try { if (this.InvokeRequired) { this.Invoke(vd); } else { vd(); } } catch { vd(); } return; } if (bt == null) { bt = File.ReadAllBytes(fi.FullName); //File.ReadAllText(fi.FullName, Encoding.Unicode); Little Endian } resultText = Encoding.Unicode.GetString(bt); if (resultText[0] == (char)0xFEFF) { resultText = resultText.Substring(1); } /* * int i = resultText.IndexOf("01234567890123456789"); * if (i > 0) * resultText = resultText.Substring(0, i); */ fromFile = true; try { if (this.InvokeRequired) { this.Invoke(vc); } else { vc(); } } catch { vc(); } }
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(); }
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_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(); }