sokoti

اشکالاتی در md5 و استفاده ازsha

1 پست در این موضوع

محققان چندین عیب برای الگوریتم های sha1 و md5 پیداکرده اند. به همین دلیل برنامه های مدرن PHP از این دو تابع برای hash کردن استفاده نمیکنند. بلکه آنها از الگوریتم خانواده sha2 مانند sha256 یا sha512 استفاده میکنند. بر اساس اسمشان یکی hash 256 بیتی و دیگری hash 512 بیتی تولید میکنند. این تابع ها جدید تر و به طور قابل ملاحظه ای قویتر از md5 هستند. یکی از آنها افزایش تعداد بیت ها که کاهش برخوردها را دربردارد.

کد زیر نحوه استفاده از sha256 را نشان میدهد.

$password=hash(“sha256”,$password);

تابع hash() را ارائه میدهد. آرگومان اول نام الگوریتم را میگیرد( شما میتوانید از الگوریتم های sha256 , sha512 , md5 , sha1 و دیگر الگوریتم های متداول استفاده کنید). آرگومان دوم هم متنی که قرار است تبدیل به hash شود.

اضافه کردن امنیت با استفاده از Salts

خب با استفاده از sha512 شما بیشترین امنیت را به پسورتان اضافه میکنید. اما اگر حمله کننده به دیتابیس از انواع الگوریتم ها برای برگرداندن پسورد شما استفاده کند میتواند پسوردها را به راحتی رمزگشایی کند.

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

حتی اگر پسورد دو اکانت شبیه هم باشد باز هم رشته hash شده شبیه هم نخواهد بود زیرا ما از عدد تصادفی استفاده میکنیم.

برای استفاده از salt مانند زیر عمل میکنیم:

define("MAX_LENGTH_SALT",6);
function generateHash($password){
   $rand=md5(uniqid(rand(),true));
   $salt=substr($rand , 0 , MAX_LENGTH_SALT);
   return hash("sha256",$password . $salt);
}

برای ساخت salt ما به uniqid() احتیاج داریم. آرگومان اول تابع rand است که یک عدد تصادفی در integer میسازد و آرگومان دوم true میگیرد زیرا ما میخواهیم اعداد منحصر به فرد باشند.

برای اعتبارسنجی کاربر باید مقدار salt را در ذخیره کنیم(در یکی از فیلدهای دیتابیس). زمانی که کاربر سعی کرد وارد اکانت خود شود مقدار salt را در پسورد وارد شده وارد میکنیم سپس با استفاده از تابع hash مقایسه را انجام میدهیم.

Share this post


Link to post
Share on other sites

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

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

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری