سلام به دوستان عزیز ITPro ای و علاقه مندان به برنامه نویسی و توسعه نرم افزار. در این آموزش می خواهیم برنامه ای را پیاده سازی نماییم که با استفاده از الگوریتم هش SHA1 پیاده سازی شده در دات نت و استفاده از BackGroundWorker و ProgressBar از فایل هایمان کد هش SHA1 تولید نماییم.
فضای نام های مورد نیاز (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();
        }
            
                        
نظرات کاربران (0)