چگونه الگوریتم SHA1 را با BackgroundWorker و ProgressBar بنویسیم؟

سلام به دوستان عزیز ITPro ای و علاقه مندان به برنامه نویسی و توسعه نرم افزار. در این آموزش می خواهیم برنامه ای را پیاده سازی نماییم که با استفاده از الگوریتم هش SHA1 پیاده سازی شده در دات نت و استفاده از BackGroundWorker و ProgressBar از فایل هایمان کد هش SHA1 تولید نماییم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
MainForm

فضای نام های مورد نیاز (Namespace)


using System.IO;
using System.Security.Cryptography;

کد دکمه OpenFile برای انتخاب فایل مورد نظرمان جهت محاسبه کد هش آن


        private void btnOpenFile_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog ofd=new OpenFileDialog())
            {
                if (ofd.ShowDialog()==DialogResult.OK)
                {
                    txtPath.Text = ofd.FileName;
                }
            }
        }

کد دکمه ComputeHash برای فراخونی BackGroundWorker جهت محاسبه کد هش


        private void btnComputeHash_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync(txtPath.Text);
        }

کد BackGroundWorker جهت محاسبه کد هش فایل موردنظر و گزارش درصد پیشرفت به ProgressBar


        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            string path = e.Argument.ToString();

            byte[] buffer;
            int bytesRead;
            long size;
            long totalBytesRead = 0;

            using (Stream InputFile = File.OpenRead(path))
            {
                size = InputFile.Length;

                using (HashAlgorithm hasher = HashAlgorithm.Create("SHA1"))
                {

                    do
                    {
                        buffer = new byte[4096];
                        bytesRead = InputFile.Read(buffer, 0, buffer.Length);
                        totalBytesRead += bytesRead;
                        hasher.TransformBlock(buffer, 0, bytesRead, null, 0);
                        backgroundWorker1.ReportProgress((int)((double)totalBytesRead / size * 100));

                    } while (bytesRead != 0);

                    hasher.TransformFinalBlock(buffer, 0, 0);

                    e.Result = ConvertByteToString(hasher.Hash);
                }
            }
            
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show(e.Result.ToString(), "SHA1");
            progressBar1.Value = 0;
            txtPath.Text = string.Empty;
        }

کد تابع ConvertByteToString برای تبدیل آرایه ای از بایت ها به رشته


        private string ConvertByteToString(byte[] buffer)
        {
            StringBuilder sb = new StringBuilder(buffer.Length);

            foreach (byte item in buffer)
            {
                sb.Append(item.ToString("X2"));
            }

            return sb.ToString();
        }

موفق باشید.


نظرات