PDA

View Full Version : نحوه عملکرد الگوریتم SHA1 در سی شارپ؟



malihehshajari
دوشنبه 27 خرداد 1392, 09:30 صبح
سلام
میشه لطفا در مورد الگوریتم SHA1 یکم توضیح بدید و یک نمونه مثال بزنید
و اگه میشه در مورد کد زیر یکم توضیح بدید
با تشکر

SHA1CryptoServiceProvider SHA1Service = new SHA1CryptoServiceProvider();
byte[] tmpMessageDigest = SHA1Service.ComputeHash(data, 0, data.Length - 20);
byte[] messageDigest = new byte[20];
Buffer.BlockCopy(data, data.Length - 20, messageDigest, 0, 20);

میلاد رئیسی
دوشنبه 27 خرداد 1392, 09:39 صبح
تعریف Hashing :

Hashing در لغت به معنای مخلوط کردن است و در علوم کامپیوتر به یک نوع خاصی از الگوریتم های رمز نگاری گفته میشود . عمل Hashing یک عمل یکطرفه میباشد بدین معنی که یک رشته را میتوان Hash کرد ولی یک رشته Hash شده را نمیتوان به حالت اول بازگرداند . برای روشن تر شدن مفهوم Hashing مثالی ذکر میکنم:

رشته “miladsoft” را بعنوان یک رشته در نظر بگیرد . با استفاده از Hashing و استفاده از الگوریتم SHA1 (یکی از الگوریتم های رمز نگاری که در .netاز آن استفاده میشود) رشته Hash شده زیر حاصل میشود:


e91fc94f9376676cc9251923b7e68983aa692175

ولی امکان اینکه رشته Hash شده فوق را به حالت اول برگرداند هرگز وجود ندارد .نکته قابل توجه در این بخش این است که رشته Hash شده miladsoft همیشه مقدار فوق میباشد و رشته دیگری نیست که مقدار Hash شده ی آن برابر با مقدار Hash شده رشته miladsoft باشد .


مواردی که از Hashing استفاده میشود:


یکی از مواردی که از تکنیک Hashing استفاده میشود بخش Login سایت میباشد . در ابتدا در مرحله Register ،Password ی که از کاربر گرفته میشود Hash شده و مقدار Hash شده در Table مربوطه قرار میگیرد . با این عمل امنیت DataBase بالا رفته و در صورتHack شدن DataBaseاطلاعات کاربران به سرقت نخواهد رفت .

برای تائید کاربران با استفاده از Username و Password ابتدا در قسمت Login سایت Username و Password از کاربر گرفته میشود و Password وارد شده Hash میشود . این مقدار به همراه Username به تابعی ارسال میشوند . در این تابع ابتدا Username در Table مربوطه جستجو میشود و Password متناظر که Hash شده است با Password کاربر که آن هم Hash شده است مقایسه می شوند چنانچه این دو مقدار یکی باشد بدین معناست که کاربر Username و password صحیحی را وارد کرده است .


استفاده از Hashing در ASP.net:

بهره گیری از Hashing در ASP.net بسیار آسان بوده و .net امکانات فراوانی در این زمینه فراهم آورده که همه ی آنها در System. Web .Security میباشد . برای Hash کردن یک رشته میتوان از متد زیر استفاده کرد:

String FormsAuthentication.HashPasswordForStoringInConfig File(string source_str , string hash_algtm);

متد فوق دو ورودی دارد که اولی درواقه رشته مورد نظر است که میخواهید آن را Hashکنید و دومی الگوریتم Hashing میباشد که میتواند یکی از دو مقدار SHA1 یا MD5 باشد . خروجی نیز مقدار Hash شده است .

ali_md110
دوشنبه 27 خرداد 1392, 12:31 عصر
من از تابع زیر جهت هش کردن داده هام استفاده میکنم

private string HashPassword(string strPassword)
{
string tempHashPassword = null;
try
{
//Declare local variables
byte[] bytPasswordIn = null;
byte[] bytPasswordOut = null;

using (System.Security.Cryptography.SHA1CryptoServicePro vider objHashAlgorithm = new System.Security.Cryptography.SHA1CryptoServiceProv ider())
{
//تبدیل رشته ورودی به آرایه ای از بایتها
bytPasswordIn = System.Text.Encoding.UTF8.GetBytes(strPassword);

//هش کردن داده های آرایه)
bytPasswordOut = objHashAlgorithm.ComputeHash(bytPasswordIn);

//و تبدیل داده هش شده به یک رشته 64 بیتی
tempHashPassword = Convert.ToBase64String(bytPasswordOut);
}
}
catch (Exception ExceptionErr)
{
throw new System.Exception(ExceptionErr.Message, ExceptionErr.InnerException);
}
return tempHashPassword;
}