Esempio n. 1
0
        private void BtnWipe_Click(object sender, RoutedEventArgs e)
        {
            Stopwatch sp = Stopwatch.StartNew();
            UpdateMainProgressBarDelegate updateMainPBar            = new UpdateMainProgressBarDelegate(mainProgressBar.SetValue);
            UpdateProgressBarDelegate     updateProgressBarDelegate = new UpdateProgressBarDelegate(progressBar.SetValue);

            _fileCount = files.Count;
            int fileIndex = 1;

            for (int i = _fileCount - 1; i >= 0; i--)
            {
                if (WipeFile(files[i]))
                {
                    //progressBar.Value = Convert.ToInt32((double)fileIndex / _fileCount * 100);
                    Dispatcher.Invoke(updateProgressBarDelegate, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, (double)fileIndex / _fileCount * 100 });
                    files.RemoveAt(i);
                    fileIndex++;
                }
                FileListView.ItemsSource = files;
                resultMsg.Text           = $"{files.Count} files ready for shredding";
            }
            if (folders.Count > 0)
            {
                int folderCount = folders.Count;
                for (int i = folders.Count - 1; i >= 0; i--)
                {
                    Directory.Delete(folders[i]);
                    folders.RemoveAt(i);
                    FolderListView.ItemsSource = folders;
                }
            }

            Dispatcher.Invoke(updateProgressBarDelegate, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, 100.0 });
            Dispatcher.Invoke(updateMainPBar, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, 100.0 });
            //for (int i = (int)progressBar.Minimum; i <= (int)progressBar.Maximum; i++)
            //{
            //    Dispatcher.Invoke(updateProgressBarDelegate, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, Convert.ToDouble(i) });
            //}
            resultMsg.Text = $"Files successfully shreded";
            Logging.LogMessage(LoggingLevel.Info, resultMsg.Text);
            sp.Stop();
            completedIn.Text = $"{sp.Elapsed.TotalMilliseconds.ToString("F3")} ms";
            Logging.LogMessage(LoggingLevel.Info, completedIn.Text);
        }
Esempio n. 2
0
        private bool WipeFile(FileModel file)
        {
            UpdateMainProgressBarDelegate updateMainPBar = new UpdateMainProgressBarDelegate(mainProgressBar.SetValue);

            try
            {
                int timesToWrite = 10;
                File.SetAttributes(file.Path, FileAttributes.Normal);
                double sectors               = Math.Ceiling(new FileInfo(file.Path).Length / 512.0);
                byte[] dummyBuffer           = new byte[512];
                RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

                for (int i = 0; i <= 3; i++)
                {
                    byte[] infile = File.ReadAllBytes(file.Path);
                    AES.SetDefaultKey(FileControls.GenerateRandomKey(25));

                    if (infile.Length > 0)
                    {
                        FileStream inputStream = new FileStream(file.Path, FileMode.Open);
                        byte[]     data        = AES.Encrypt(infile);
                        inputStream.SetLength(0);
                        inputStream.Seek(0, SeekOrigin.Begin);
                        inputStream.Write(data, 0, data.Length);

                        for (int passIndex = 0; passIndex < timesToWrite; passIndex++)
                        {
                            inputStream.Position = 0;
                            for (int sectorIndex = 0; sectorIndex < sectors; sectorIndex++)
                            {
                                rng.GetBytes(dummyBuffer);
                                inputStream.Write(dummyBuffer, 0, dummyBuffer.Length);
                            }
                            Dispatcher.Invoke(updateMainPBar, DispatcherPriority.Background, new object[] { RangeBase.ValueProperty, (double)passIndex / timesToWrite * 100 });
                        }
                        //inputStream.SetLength(0);
                        inputStream.Close();
                    }
                }

                FileStream instream = new FileStream(file.Path, FileMode.Open);
                instream.SetLength(0);
                instream.Close();

                DateTime dt = new DateTime(2037, 1, 1, 0, 0, 0);
                File.SetCreationTime(file.Path, dt);
                File.SetLastAccessTime(file.Path, dt);
                File.SetLastWriteTime(file.Path, dt);

                File.SetCreationTimeUtc(file.Path, dt);
                File.SetLastAccessTimeUtc(file.Path, dt);
                File.SetLastWriteTimeUtc(file.Path, dt);

                File.Delete(file.Path);
                AES.UnsetDefaultKey();
                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
            finally
            {
                if (folders.Count > 0)
                {
                }
            }
        }