آشنایی با محبوب‌ترین الگوریتم‌های Hashing(هشینگ)

در مقاله ی گذشته که درباره ی انواع روش های مختلف رمزنگاری اطلاعات صحبت کردیم با الگوریتم های برگشت ناپذیر آشنا شدیم وآموختیم که داده های ما اصطلاً Hash میشوند و به هیچ عنوان قبل بازگشت به متن اصلی نیستند.

از جمله الگوریتم های Hashing که در رمزنگاری از آنها استفاده میشود میتوان به عناوین زیر اشاره نمود که در این مقاله به بررسی آنها میپردازیم.

✓ SHA1 

✓ SHA256 

✓  MD5  

الگوریتم SHA یکی از الگوریتم های Hashing است. SHA دارای انواع مختلف از قبیل SHA1 و SHA256 است. 

SHA1

اثبات شده است که الگوریتم SHA1 به ازای رشته های ورودی های متفاوت ممکن است خروجی مشابهی داشته باشد. همانطور که گفته شد الگوریتم های Hashing رشته هایی برگشت ناپذیر ایجاد میکنند و صرفا قابل تطبیق با رشته اصلی هستند؛ اگر یک الگوریتم از دو رشته ورودی مختلف Hash های مشابهی تولید کند آن گاه طبیعتا هر دو رشته  اصلی با Hash مطابق خواهد بود و قابل تایید میباشد و این نقص میتواند خطراتی به همراه داشته باشد. از این رو این الگوریتم به پایان نقش خود در اکثر سیستم های اطلاعاتی رسیده است.
 

الگوریتم SHA256

یکی از پرکاربردترین و ایمن ترین الگوریتم های Hashing است. قطعه کد #C عملیات Hashing و Verify این الگوریتم در ذیل آورده شده است. 

 public class Sha256
    {
        public static string ComputeSha256Hash(string text)
        {
            using (SHA256 sha256Hash = SHA256.Create())
            {
                byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(text));

                return Convert.ToBase64String(bytes);
            }
        }
        public static bool VerifySha256Hash(string inputText,string hashString)
        {
            var hash = Convert.FromBase64String(hashString);
            using (SHA256 sha256Hash = SHA256.Create())
            {
                byte[] tempHash;

                tempHash = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(inputText));

                bool bEqual = false;
                if (hash.Length == tempHash.Length)
                {
                    int i = 0;
                    while ((i < hash.Length) && (hash[i] == tempHash[i]))
                    {
                        i += 1;
                    }
                    if (i == hash.Length)
                    {
                        bEqual = true;
                    }
                }
                return bEqual;
            }
        }
    }

قطعه کد فوق با وجود استفاده از الگوریتم SHA256 از نهایت اطمینان برخوردار نیست. از این رو در اکثر موارد ابتدا داده اصلی را Hash و سپس آن را با استفاده از الگوریتم RSA، و کلید خصوصی Sign میکنند تا در هنگام تبادل اطلاعات و یا دسترسی افراد غیر مجاز از امنیت بالاتری برخوردار باشد. پس از توضیحات الگوریتم RSA در مقاله ی بعد به این مورد باز خواهیم گشت.

الگوریتم MD5

این الگوریتم نیز یکی دیگر از الگوریتم های Hashing است. از آنجایی که سابقه شکستن MD5 وجود دارد، استفاده از آن توصیه نمیشود و جزو الگوریتم های رو به منسوخ شدن است. قطعه کد سیشارپ این الگوریتم مشابه با SHA256 است و به جای کلاسهای مربوط به SHA از کلاسهای MD5 استفاده میشود.

در این مقاله با الگوریتم هایی که با استفاده از عملیات Hashing اطلاعات ما را رمزنگاری می کنند آشنا شدیم. در مقاله بعد به معرفی الگوریتم هایی خواهیم پرداخت که با استفاده از روش های رمزنگاری متقارن و نامتقارن داده های ما را Encryption میکنند.

نظر خود را بنویسید.