الگوریتم MD5

شنبه 12 مرداد 1392

الگوریتم MD5 <br/> با استفاده از الگوريتم MD5 ميتوان پسوردهاي كاربران موقع ثبت نام به صورت كدگذاري شده ذخيره كرد ،حتي مدير سايت كه به ديتابيس سايت دسترسي كامل داره نتونه پسورد واقعي كاربران رو حدس بزنه!!!

الگوریتم 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 ميتونه باشه.

منبع:سايت اموزش الكترونيكي پرشيا

.

MohammadJavad

نویسنده 86 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 0 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید