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

UserName یا نام کاربری بسته به موضوع و هویت کاربران سیستم نرم افزاری تعیین می گردد. به طور مثال در یک سیستم دانشگاهی نام کاربری برای دانشجویان عموما شماره دانشجویی آنها می باشد. در یک سیستم اتوماسیون اداری نام کاربری عموما شماره پرسنلی افراد می باشد. برای همین نام کاربری بسته به شرایط و ماهیت سیستم تعیین می گردد و می تواند فرمت و ساختار متفاوتی داشته باشد.



Password یا رمز عبور پارامتر دوم در احراز هویت کاربر می باشد که از حساسیت بالایی نیز برخوردار است. همیشه باید برای رمز عبور ویژگی هایی از قبیل طول رمز عبورو میزان پیچیدگی مشخص نمود و کاربر را به رعایت آن شرایط اجبار کرد. البته این سخت گیری ها بسته به سیستم نرم افزاری است که کاربر با آن کار می کند. هر چقدر سیستم نرم افزاری مهم تر و حساس  تر باشد، سختی رمز عبور نیز باید بیشتر باشد.

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


همیشه باید رمز عبور را به صورت Hash شده (رمزنگاری یک طرفه و غیر قابل بازگشت) نگهداری نمود.

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

سوال : شاید این ابهام برای شما ایجاد شود که اگر رمز عبور وارد شده را طوری رمز نمائیم که دیگر قابل بازگشت نباشد آن وقت چگونه در دفعات بعد متوجه شویم کاربر رمز عبور خود را درست وارد نموده و چگونه کار مقایسه رمز عبور داخل دیتابیس و رمز عبور وارد شده توسط کاربر در هنگام Login را چک نمائیم!؟




ما رمز اولیه را با یک روش و الگوریتم مشخص Hash کرده ایم. به طور مثال رمز عبور 123 پس از Hash کردن تبدیل به TabUilwNlV8E429UbWBKut می شود و در جدول کاربران در دیتابیس ذخیره می گردد.

از طرفی کاربر در زمان ورود به سیستم در فرم لاگین نام کاربری و رمز عبور خود که 123 می باشد را وارد می نماید. رمز وارد شده توسط کاربر که 123 می باشد نیز Hash شده و تبدیل به TabUilwNlV8E429UbWBKut می شود. حالا باید رمز جدید که Hash شده با رمزی که در دیتابیس نگهداری می شود مقایسه شود تا مشخص شود کاربر رمز عبور خود را صحیح وارد کرده است یا نه.

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


انواع الگوریتم های Hash کردن :

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

1.MD5 :

اولین و مرسوم ترین الگوریتم رمزنگاری می باشد. طول رشته تولید شده توسط این الگوریتم 34 کاراکتر می باشد. مثلا عبارت 123 پس از رمز شدن توسط MD5 تبدیل به 0x202CB962AC59075B964B07152D234B70 می شود.


نحوه استفاده از MD5 : 

برای استفاده از این روش باید ابتدا در بالای صفحه using زیر را اضافه نمائیم.

using System.Security.Cryptography

متد زیر کار Hash کردن رمز عبور توسط الگوریتم MD5 را انجام می دهد.


در تصویر بالا مشاهده می کنید که برای استفاده از این متد فقط کافی است آن را فراخوانی نماییم و رمز عبور خود را به آن داده و رمز تولید شده را در خروجی متد دریافت نماییم.مانند تصویر زیر :


الگوریتم  خانواده SHA :

در این روش 3 مدل الگوریتم رمزنگاری وجود دارد که در هر کدام طول رشته تولید شده متفاوت می باشد.SHA دارای الگوریتم های زیر می باشد :

 SHA - 1  :  این  روش که با استفاده از کلاس SHA 128  می باشد اولین الگوریتم رمزنگاری در این گروه می باشد.

طریقه استفاده از این الگوریتم همانند الگوریتم MD5 می باشد.


SHA - 2 :  در این روش دو نوع 256 و 512 می باشد که مطابق با تصویر زیر استفاده می شود. همه این روش ها در استفاده شبیه یکدیگر می باشند و تنها تفاوت آنها در طول رمز تولید شده توسط آنها می باشد.

SHA256

روش SHA512


SHA - 3  :  این روش را به صورت مستقیم نمی توان در dotNET استفاده نمود و باید از Library مرتبط برای این کار استفاده نمود.


در این مقاله با روش رمزنگاری یک طرفه ثابت آشنا شدیم و نحوه رمزنگاری یک طرفه را با الگوریتم های مختلف آموختیم. در مقاله های بعدی این بحث را کامل تر ادامه خواهیم داد.