ذخیره اطلاعات حساس(مانند رمزهای عبور) بصورت هش شده در بانک اطلاعاتی

کربلایی

مدیر بازنشسته
سلام
یکی از مشکلاتی که همیشه داشتم این بود که بتونم اطلاعات حساس و مهم رو بصورت هش شده در دیتا بیس ذخیره کنم!
راهی که در زیر معرفی می شه این مشکل رو برطف میکنه:
این مقاله رو در سایت سابق ایران asp دیدم.

در این مقاله به کمک الگوریتم MD5 کلاسی تهیه می کنیم که یک رشته را بعنوان ورودی دریافت و یک رشته با طول 16 را بصورت کد شده تحویل ما دهد. از این کلاس می توانیم بعنوان بخشی از سطح امنیتی در پروژه هایمان استفاده کنیم.



MD5 :
یک الگوریتم کار آمد رمز سازی است که در بسیاری از زبانهای برنامه نویسی دیگر نیز وجود دارد. MD5 عضوی با نام ComputeHash دارد که یک تابع Hash یا (Hash function) است.
توابع Hash یا (Hashfunctions) یک binary string با طول دلخواه را به یک binary string با طول کوتاه و ثابت تبدیل می کند، و این خاصیت را دارد که هرگز برای دو ورودی مجزا یک خروجی یکسان وجود نخواهد داشت (به عبارت دیگر توابع Hash تضمین میکنند که هر ورودی خروجی منحصر به فردی را داشته باشد).

برای ساخت کلاس فوق الذکر احتیاج به اضافه کردن دو فضا نام داریم که عبارتند از :


کد:
using System.Text;
کد:
[LEFT][FONT=Arial]using System.Security.Cryptography;[/FONT][/LEFT]



ساخت تابع رمز ساز :


کد:
public static byte[] computeMD5Hash(string InputString)
کد:
[LEFT][FONT=Arial]{[/FONT] 
[LEFT][FONT=Arial]byte[] MDH = new byte[16];[/FONT] 
[FONT=Arial]UTF8Encoding encoder = new UTF8Encoding();[/FONT] 
[FONT=Arial]MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();[/FONT] 
[FONT=Arial]MDH = md5Hasher.ComputeHash(encoder.GetBytes(InputString));[/FONT] 
[FONT=Arial]return MDH;[/FONT] 
[FONT=Arial]}[/FONT][/LEFT]
[/LEFT]

نحوه استفاده از این کلاس :
برای استفاده از این کلاس در پروژه های خود، کافیست فایل ساخته شده را با نامی مانند ClsCrypt.cs در پوشه App_code ذخیره سازید و در هر قسمت از سطوح برنامه که احتیاج به کدگذاری داشتید از دستور زیر استفاده کنید :


کد:
ClsCrypt.computeMD5Hash(TextBox1.Text);


توجه داشته باشید از آنجایی که computeMD5Hash بصورت static تعریف شده است احتیاجی به ایجاد ClsCrypt در برنامه نیست.
همچنین در صروتی که برای کد کردن اطلاعات کاربران (مانند کلمه عبور) از این تکنیک استفاده می کنید ، زمان اعتبار سنجی نیز مقدار وارد شده توسط کاربر را ، بویسله روشی که توضیح داده شد کد کرده و سپس با مقدار ذخیره شده در بانک اطلاعات مقایسه کنید.

نکته :
از آنجایی که کلاس فوق الذکر تمام رشته های ورودی (با هر طولی) را در نهایت به یک رشته کد شده با طول 16 تبدیل می کند پیشنهاد می کنیم فیلد موزد نظر در بانک اطلاعاتی از نوع Binary با طول 16 انتخاب شود.

کد کامل فایل ClsCrypt.cs

کد:
using System;
کد:
[LEFT]using System.Data; 
[LEFT]using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Security.Cryptography;
using System.Text;
/// <summary>
/// MD5 Hasher By [URL="http://www.www.www.iran-eng.ir"]www.www.www.iran-eng.ir[/URL]
/// </summary>
public class ClsCrypt
{
public ClsCrypt()
{
 //
 // TODO: Add constructor logic here
 //
}
   public static byte[] computeMD5Hash(string InputString)
   {
       byte[] MDH = new byte[16];
       UTF8Encoding encoder = new UTF8Encoding();
       MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
       MDH = md5Hasher.ComputeHash(encoder.GetBytes(InputString));
       return MDH;
   }
}[/LEFT]

منبع: ایران ASP​
[/LEFT]
 

Similar threads

بالا