سلام به دوستان عزیز 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(); }
موفق باشید.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود