示例#1
0
        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));
        }
示例#2
0
        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);
            }
        }
示例#3
0
        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();
            }
        }
示例#4
0
        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();
        }
示例#5
0
        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);
            }
        }
示例#6
0
        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();
        }