الگوریتم MD5
شنبه 12 مرداد 1392الگوریتم MD5 <br/> با استفاده از الگوريتم MD5 ميتوان پسوردهاي كاربران موقع ثبت نام به صورت كدگذاري شده ذخيره كرد ،حتي مدير سايت كه به ديتابيس سايت دسترسي كامل داره نتونه پسورد واقعي كاربران رو حدس بزنه!!!
با استفاده از الگوريتم MD5 ميتوان پسوردهاي كاربران موقع ثبت نام به صورت كدگذاري شده ذخيره كرد ،حتي مدير سايت كه به ديتابيس سايت دسترسي كامل داره نتونه پسورد واقعي كاربران رو حدس بزنه!!! كلا دو نوع رمزگذاري وجود داره:1-رمزگذاري يه طرفه2-رمزگذاري دوطرفه معمولترين نوع رمزنگاري هست. تو روش دوطرفه يه متن عادي گرفته شده و كدگزاري ميشه و عكسش هم صادقه و رمزگشايي ميشه. اما الگوريتم هاي رمزنگاري يه طرفه فقط رمز ميكنند و راهي براي رمزگشايي وجود نداره.دقيقا مثالي كه ميخوام بزنم مربوط ميشه به يه طرفه. الگوريتم MD5 يه رشته با هر طولي رو به رشه كدگذاري شده با طول ثايت(16 بايت) تبديل ميكنه و دو خاصيت مهم داره:1-دورشته ورودي خروجي كد شده يكساني ندارند2- هر داده مفروضي به يه رشته كدگزاري شده تبديل ميشه يعني كسي يه پسورد وارد كنه هميشه شكل كدگذاري اون ثابت و منحصربه فرد است. براي استفاده از MD5 از فضا نيم system.security.cryptography از كلاسي به نام MD5 crypto service provider استفاده ميشه. متد اصلي اين كلاس cmputehash كه ورودي او آرايه اي از بايت است (رشته اي كه بايد رمزگذاري بشه) ويه آرايه از بايت ها رو برميگردونه و همان داده رمزگذاري شده است.در واقع ما ميخواهيم يه رشته رو رمزگذاري كنيم پس بايد اونوبه آرايه از بايت ها براي تابع تبديل كنيمكه اين تبديل با utf8encding انجام ميشه. در ديتابيس اغلب يور و پسورد از نوع nvarchar تعين ميكنيم ولي در بحث رمزگذاري بهتره نوع فيلد پسورد binary با طول 16 انتخاب كنيم چون پسورد كاربرا با هر طولي تبديل به آرايه اي بايت ها با طول ثابت 16 خواهد شد.
پس ابتدا فيدهاي يوزر نيم و پسورد و اي دي رو ايجاد كرده و جدول را با نام tblusers ذخيره كنيد.
سپس يه پروژه جديد ايجاد كنين و از منوي پروژه يه كلاس به برنامه اضافه كنين و اسمش رو crypt.csبزاريد:
كدهاي زير به اين شكل مينويسيم:
Using system;
Using system.Security.cryptography;
Using .system.text;
Namespace
{
Public class clscrypt
{
Public clscrypt()
{
}
Public byte[] computemd5hash(string strtext)
Byte[] hasheddatebyte=new byte[16];
Utf8encoding encoder=new utf8encding();
MD5cryptserviceprovider md5hasher=new MD5cryptserviceprovider ();
Hasheddatebytes =md5hasher .computehash(encoder.getsbyte(strtext));
Return hasheddatebytes;
}
روي دكمه دابل كليك كنيد و كدهاي زير رو بنويسيد:
Sqlconnection objconn=new sqlconnection(strconnstring);
String strsql="insert into tblusers (username,password)"+"values(@username,@password)";
Sqlcommand objcmd=new sqlcommand(strsql,objconn);
Sql parameters paramusername=new sqlparametrs("@username",sqldbtype.nvarchar,50);
Paramusername.values=textid.text;
Objcmd.parametrs.add(paramusername);
Clscrypt cr=new Clscrypt();
Byte[] hashedbytes=new byte[16];
Hashedbyte=cr.computehash(txtpass.text);
Sqlparametrs parampass=new sqlparametrs("@passwrd",sqldbtype,binary,16);
Parampass.values=hashedbytes;
Objcmd.parametrs.add(parampass);
Objconn.open();
Objcmd.executenonquery();
Objconn.close();
خوب بعد اينكه عمليات درج در بانك انجام شد در ديتا بيس با گزينه query analyzer پسورهاي ذخيره شده رو مي بينين
خوب در اين حالت در خوشبينانه ترين حالت مدير سايت از پسوردها چيزي سر درنمياره! و پسورد اصلي رو نميتونه رمزگشايي كنه. براي بررسي authentication كاربران هم هم در اين الگوريتم يه طرفه است .هر پسوردي فقط معادل يه رشته كدگذاري شده منحصر به فرده.پس براي تعيين اعتبار كاربرا هر بار از كاربر پسورد گرفته و اونو رمزگذاري ميكنه و رشته توليد شده رو با رشته هاي موجود در بانك اطلاعاتي مقايسه ميكنه. استفاده از گزينه "اينجا كليك كنيد تا پسورد فراموش شده شما رو برايتان ايميل كنيم"ديگه بي معنيه. تو اين حالت ميتونيم يه عدد تصادفي به ايميل كاربر ارسال كرده و به اون ميگيم كه با اين پسورد لاگين شو و بعد خودش پسوردي كه ما براش ايميل كرديم رو عوض ميكنه. يه راه ميانبر: براي هش كردن اطلاعات با دو الگوريتم MD5 وhash1 ميتونيم از يه راه ميانبر هم استفاده كنيم ،در فضا نيم system.web.security از اين متد استفاده كنيم: Textpass.text=formsauthentication.hashpasswordforstringinconfigfile(txtinput.text,"hash");
آرگومان اولي متني كه بايد هش شه و ارگومان دوم يكي از MD5 وhash ميتونه باشه.
منبع:سايت اموزش الكترونيكي پرشيا
.
- C#.net
- 4k بازدید
- 0 تشکر