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 کیلو بایت - لینک مستقیم