PDA

View Full Version : Hashing اطلاعات در زبانهای مختلف



Vahid_Nasiri
یک شنبه 15 شهریور 1383, 20:34 عصر
مقدمه :

Hash‌ کردن پسوردها تقریبا در تمام سایت های پویای تحت وب متداول است. اینکار در جهت بالا بردن امنیت پسوردهای ذخیره شده افراد انجام می شود. در این مقاله، روش Hash کردن داده ها را در زبانهای مختلف بررسی می کنیم.


الف ) php :

در php اینکار به سادگی هرچه تمام تر به صورت زیر قابل انجام است:


<?
echo md5("Test") ;
?>

هنگامی که کاربران برای ثبت نام به سایت شما مراجعه می کنند تنها کافی است پسورد وارد شده ی آنها را hash‌ کرده و در دیتابیس ذخیره کنید. هنگام ورود(لاگین) ، پسورد معمولی آنها دریافت گردیده ، hash‌ شده و با مقدار موجود در دیتابیس مقایسه می شود. به این صورت از این نوع الگوریتم ها در سایت های پویای تحت وب استفاده می گردد.

جهت استفاده بیشتر علاقمندان، کلاسی جهت hash‌ کردن داده ها با استفاده از الگوریتم SHA1 برای php ضمیمه ی این مقاله شده است.


ب) در محیط دات نت و برای مثال ASP.NET :

راه اول:
ابتدا فضای نام System.Web.Security را به برنامه خود اضافه کنید. سپس با استفاده از دستور زیر که دو الگوریتم MD5 و SHA1 را پشتیبانی می کند به سادگی می توان ورودی را هش کرد:



txtRes.Text = FormsAuthentication.HashPasswordForStoringInConfig File(
txtInput.Text, "SHA1");


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


using System;
using System.Text;
using System.Security.Cryptography ;

namespace hex_cs
{
/// <summary>
/// Summary description for clsHash.
/// </summary>
public class clsHash
{
public clsHash()
{
//
// TODO: Add constructor logic here
//
}

/*
public string encryptPassMD5(string strPass)
{
return
System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(
strPass,
"MD5");
}

public string encryptPassSHA1(string strPass)
{
return
System.Web.Security.FormsAuthentication.HashPasswo rdForStoringInConfigFile(
strPass,
"SHA1");
}
*/

public string MD5 (string strInput_plainText)
{
/// Convert plain text into a byte array.
byte[] buffer = Encoding.UTF8.GetBytes(strInput_plainText);
System.Security.Cryptography.MD5CryptoServiceProvi der check;
check = new System.Security.Cryptography.MD5CryptoServiceProvi der();
byte[] somme = check.ComputeHash (buffer);
return Convert.ToBase64String(buffer);
}

public string GetMD5(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(strPlain);
MD5 md5 = new MD5CryptoServiceProvider();
string strHex = "";

HashValue = md5.ComputeHash(MessageBytes);

foreach(byte b in HashValue)
{
strHex += String.Format("{0:x2}", b);
}

return strHex;

} /* GetMD5 */

public string GetSHA1(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(strPlain);
SHA1Managed SHhash = new SHA1Managed();
string strHex = "";

HashValue = SHhash.ComputeHash(MessageBytes);
foreach(byte b in HashValue)
{
strHex += String.Format( "{0:x2}" , b);
}
return strHex;
} /* GetSHA1 */

public string GetSHA256(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(strPlain);
SHA256Managed SHhash = new SHA256Managed();
string strHex = "";

HashValue = SHhash.ComputeHash(MessageBytes);
foreach(byte b in HashValue)
{
strHex += String.Format("{0:x2}", b);
}
return strHex;
} /* GetSHA256 */

public string GetSHA384(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(strPlain);
SHA384Managed SHhash = new SHA384Managed();
string strHex = "";

HashValue = SHhash.ComputeHash(MessageBytes);
foreach(byte b in HashValue)
{
strHex += String.Format("{0:x2}", b);
}
return strHex;
} /* GetSHA384 */

public string GetSHA512(string strPlain)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(strPlain);
SHA512Managed SHhash = new SHA512Managed();
string strHex = "";

HashValue = SHhash.ComputeHash(MessageBytes);
foreach(byte b in HashValue)
{
strHex += String.Format("{0:x2}", b);
}
return strHex;
} /* GetSHA512 */

}
}


یک نمونه مثال ساده برای استفاده از کلاس فوق (در یک ویندوز اپلیکیشن ، 6 تکست باکس روی صفحه قرار دهید (نامهای انتخاب شده کاملا گویا هستند) ):




private void txtHash_TextChanged(object sender, System.EventArgs e)
{
lblMD5.Text = "MD5: " + new clsHash().GetMD5(txtHash.Text);
lblSHA1.Text = "SHA1: " + new clsHash().GetSHA1(txtHash.Text);
txtGetSHA256.Text = "SHA256: " + new clsHash().GetSHA256(txtHash.Text);
txtGetSHA384.Text = "SHA384: " + new clsHash().GetSHA384(txtHash.Text);
txtGetSHA512.Text = "SHA512: " + new clsHash().GetSHA512(txtHash.Text);
}




ج) در ASP و VB‌ :
به سورس فوروم WebWizGuide که با asp نوشته شده است مراجعه کنید و فایل functions_hash1way.asp را جستجو نمایید! :P

M-Gheibi
یک شنبه 15 شهریور 1383, 21:43 عصر
با عرض خسته نباشید خدمت جناب نصیری :wink:
در ادامه گفته های استاد فایل ضمیمه جهت استفاده از MD5 در ASP کلاسیک ارسال شده است.

Marine
چهارشنبه 04 آذر 1383, 02:50 صبح
کسی مثال هش تو زباان دلفی سراع نداره ؟

Vahid_Nasiri
چهارشنبه 04 آذر 1383, 11:47 صبح
http://www.fichtner.net/delphi/md5.delphi.phtml

Ref (http://www.google.com/search?q=delphi+md5)

Marine
چهارشنبه 04 آذر 1383, 15:48 عصر
سپاسگزارم دوست عزیز