کدنویس۲۱

کدنویس۲۱

با کد نویس 21 کد نویس باشید.
کدنویس۲۱

کدنویس۲۱

با کد نویس 21 کد نویس باشید.

هش کردن در سی شارپ

سلام دوستان! در این پست می خواهم به چگونگی هش کردن یک متن در C# بپردازم.

 

 

در این پست طریقه هش کردن یک فایل با پایتون را بررسی کرده بودیم. حال می خواهیم ببینیم که چطور می توانیم با سی شارپ یک متن را به صورت هش های MD5، SHA1 و SHA256 در بیاوریم.

ابتدا ما نیاز به کتابخانه System.Security.Cryptography داریم پس باید خط زیر را به ابتدای کد خود اضافه کنیم.

1
using System.Security.Cryptography;

حال برای هش MD5 یک تابع تعریف می کنیم تا هرگاه لازم بود از آن استفاده کنیم.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static string md5(string txt)
{
    if (txt != "")
    {
        using (MD5 md5 = MD5.Create())
        {
            byte[] inputBytes = Encoding.ASCII.GetBytes(txt);
            byte[] hashBytes = md5.ComputeHash(inputBytes);
            string hashString = "";
            foreach(byte b in hashBytes)
            {
                hashString += b.ToString("X2") + "-";
            }
            hashString = hashString.Substring(0, hashString.Length - 1);
            return hashString;
        }
    }
    else
    {
        return "";
    }
}

تابع بالا یک ورودی از نوع رشته گرفته و یک رشته هش از آن بر می گرداند. خط ۳ ورودی را چک می کند و اگر خالی بود رشته ای خالی را برمی گرداند(قسمت else-خط ۲۰). اگر ورودی یک رشته خالی نباشد به سراغ کد خط ۵ می رود که یک نمونه از تابع MD5 به نام md5 ایجاد می کند.

باید به این نکته توجه کنیم که تابع ComputeHash از کلاس System.Security.Cryptography.MD5 ورودی را به صورت آرایه ای از بایت ها دریافت می کند، پس ما باید پیش از هش کردن رشته(string) خود را به آرایه ای از byte ها تبدیل کنیم که برای اینکار آن را به صورت ASCII انکد می کنیم و در متغیر inputBytes می ریزیم(خط ۷).

حال که ورودی را داریم بهتر است آن را به صورت هش MD5 در آوریم پس مانند کد خط ۸ تابع ComputeHash را فراخوانی کرده و خروجی آن را در یک آرایه بایت می ریزیم.

اکنون نوبت تبدیل بایت ها به یک string است. یک متغیر از نوع رشته می سازیم که مقدار را درون آن قرار دهیم(خط ۹) سپس با کمک حلقه foreach (خط ۱۰) هر عنصر داخل آرایه HashBytes را گرفته و به متغیر HashString همراه یک دَش(-) اضافه می کنیم.

در خط ۱۰، b.ToString("X2")، عنصر b که از نوع بایت است را به یک رشته ۲ حرفی هگزادسیمال تبدیل می کند. بدون انجام این تبدیل مقدار بایت ها به صورت رشته ای از اعداد در خواهد آمد.(فرمت های استاندارد اعداد)

در خط ۱۴ با کمک تابع Substring قسمتی از رشته HashString را بریده و در عمل یک دَش اضافه را که  در انتهای هش ما قرار می گیرد را حذف می کنیم و در خط بعد از آن هم HashString را به عنوان خروجی تابع باز می گردانیم.

برای ساخت هش های SHA1 و SHA256 و SHA512 هم کافیست  تا به جای MD5 نام آن دو را بگذارید(ویژوال استدیو هم می تونه کمک کنه).

هش کردن فایل در سی شارپ هم مثل همین می مونه فقط باید کمی خلاقیت به خرج بدهید؛ اگر هم نتونستید می تونید توی کامنت های همین پست بپرسید.

امیدوارم از این پست درباره Hash ها در سی شارپ لذت برده باشید

تا روزی دیگر و کدی دیگر بدرود

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد