امنیت داده در دات نت (قسمت سوم)
Hashing
حالا سراغ Hashing میریم ، به زارین از یه تعریف کوچک شروع کنیم : ما با استفاده از Hashing یک اثر انگشت از داده ها می گیریم به عبارتی دیگر اگر شما یک داده را هش کنید دیگر با هیچ کلید مشابهی قابل برگشت نیست و رمزگذاری یکطرفه است . هدف از این روش این است که یکسری کلیدهایی با توجه به داده های ورودی تولید کند تا در بعد بدست آوردن اطلاعات ، از کلید غیر ممکن باشد .
نمونه کد در زیر آمده است :
//hash the input and display the result
private void buttonComputeHash_Click(object sender, EventArgs e)
{
byte[] input = Encoding.ASCII.GetBytes(textBoxInput.Text);
HashAlgorithm Alg = GetSelectedAlgorithm();
Alg.ComputeHash(input);
textBoxHash.Text = Convert.ToBase64String(Alg.Hash);
}
//Main Method
private HashAlgorithm GetSelectedAlgorithm()
{
//for keyed hashing algorithms only
Rfc2898DeriveBytes rfc = newRfc2898DeriveBytes(textBoxKey.Text,
Encoding.ASCII.GetBytes(textBoxSalt.Text));
HashAlgorithm Alg = null;
if (comboBoxAlgorithm.SelectedIndex == 0)
Alg = new MD5CryptoServiceProvider();
else if (comboBoxAlgorithm.SelectedIndex == 1)
Alg = new RIPEMD160Managed();
else if (comboBoxAlgorithm.SelectedIndex == 2)
Alg = new SHA1CryptoServiceProvider();
else if (comboBoxAlgorithm.SelectedIndex == 3)
Alg = new SHA256Managed();
else if (comboBoxAlgorithm.SelectedIndex == 4)
Alg = new SHA384Managed();
else if (comboBoxAlgorithm.SelectedIndex == 5)
Alg = new SHA512Managed();
else if (comboBoxAlgorithm.SelectedIndex == 6)
Alg = new MACTripleDES(rfc.GetBytes(16));
else if (comboBoxAlgorithm.SelectedIndex == 7)
Alg = new HMACSHA1(rfc.GetBytes(29));
return Alg;
}
امضای دیجیتالی یک Application
امضای دیجیتالی بر پایه دو متد است : کلیدهای عمومی و Hashing . ما ابتدا این دو را توضیح دادیم حالا می خواهیم کاربرد آنها را در یک برنامه بررسی کنیم. با یک مثال این مطلب رو توضیح می دم :
موقعیتی رو در نظر بگیرین که شما می خواهید به دوستتون یک پیام بفرستید ، وکسی هم که نامه را می گیرد می خواهد مطمئن شود که نامه از طرف شما رسیده و در وسط راه تغییر نکرده است . حالا ما با استفاده از سیستم Hashing می توانیم چک کنیم که آیا Hash فرستنده با گیرنده برابر است یا خیر ؟
اگر محتوای نامه تغییر کند Hash نیز تغییر می کند و نتیجه برابری را برنمیگرداند . در نمودار زیر می توانید این مراحل را مثاهده کنید . این نمودار از دو مرحله تشکیل شده است : امضای سند(سمت چپ) و تایید سند (سمت راست) . در دو مرحله هم برای رمزگذاری و هم برای باز کردن آن از سیستم کلید عمومی استفاده شده است . بدين منظور متن نامه ابتدا Hash میشود و سپس توسط کليد خصوصيامضا مي شود. سپس امضا و متن نامه ارسال مي شود. در طرف سرور هم با کليد عمومي داده Hashمیشود . متن ارسالي هم Hashمي شود. حال اگر اين دو نتيجه يکسان بود ، داده ها واقعًا از طرفکسي که مدعي آن است ارسال شده است. چرا که اگر متن نامه عوض شود ، نتيجه Hash متفاوت می شود و دیگر نامه باز نمی شود.
در ادمه هم کل پروژه رو برای دانلود گذاشتم . موفق باشید .
دانلود 38 کیلو بایت - لینک مستقیم