یعنی امنیت hashing به خطر افتاده؟

ziXet

مدیر انجمن PHP/MYSQL
طرز تفکر هر کسی فرق داره...
وقتی طول مقدار برگشتی بیشتر باشه، از امنیت بیشتری برخورداره. چون همیشه ممکنه دو مقدار x و y در الگوریتم md5 یا sha1 مقدار مشابه برگردونند، اما اینکه x و y هر دو، در الگوریتم های md5 و sha1 مقدار مشابه داشته باشند، بسیار بسیار کمتر هست. برای همین از هر دو الگوریتم بهتره استفاده کنیم.
اینی هم که میگم کاراکترهاشون با هم ادغام بشن برای اینه که اگه این دو تا رو کنار هم بزاریم ($str = md5($str).sha1($str)) جدا کردنشون کاری نداره، مقدار md5 یا 32 کاراکتر اول هست، یا 32 کاراکتر آخر، اما اگه ادغام بشن جدا کردن md5 و sha1 سخت میشه.

PHP:
/**
 * calculate hash of string using md5 & sha1.
 *
 * @param bool[optional] $str
 * @return string the hash as 72-character hexadecimal number
 */
function hashi($str = ''){
	$str .= 'salt';
	$str = md5($str).sha1($str);
	
	return  $str{40}.$str{41}.$str{42}.$str{43}.$str{44}.$str{45}.$str{46}.$str{47}.$str{48}.$str{49}.
			$str{20}.$str{21}.$str{22}.$str{23}.$str{24}.$str{25}.$str{26}.$str{27}.$str{28}.$str{29}.
			$str{0}.$str{1}.$str{2}.$str{3}.$str{4}.$str{5}.$str{6}.$str{7}.$str{8}.$str{9}.$str{71}.$str{70}.
			$str{30}.$str{31}.$str{32}.$str{33}.$str{34}.$str{35}.$str{36}.$str{37}.$str{38}.$str{39}.
			$str{10}.$str{11}.$str{22}.$str{13}.$str{14}.$str{15}.$str{16}.$str{17}.$str{18}.$str{19}.
			$str{60}.$str{61}.$str{62}.$str{63}.$str{64}.$str{65}.$str{66}.$str{67}.$str{68}.$str{69}.
			$str{50}.$str{51}.$str{52}.$str{53}.$str{54}.$str{55}.$str{56}.$str{57}.$str{58}.$str{59}
			;
}

/**
 * calculate hash of string using md5, base64 & sha1
 *
 * @param bool[optional] $str
 * @return string the hash as 32-character hexadecimal number
 */
function hashii($str){
	$str .= 'salt';
	return md5(base64_encode(md5($str).sha1($str)));
}
پس در مثال بالا ، ()hashi امنیت بیشتری نسبت به ()hashii داره...

===

برای من فرقی نداره که شما و ایشون از کدوم روش استفاده کنید، اصلا پسورد رو مستقیم وارد دیتابیس بکنید یا نکنید برای من فرقی نداره... اما توصیه میشه که همیشه باید از الگوریتمی استفاده کرد که پیچیده تر هست و برای decrypt کردن زمان+حوصله بیشتری نیاز داشته باشه و این کار باعث میشه:
1) امنیت سیستم رو بالا بره و لازم نیست بعد از مدتی کارفرما رو سر برنامه نویس خراب بشه که آره، سیستمت باگ داره و پولم رو پس بده و خسارت بده و از اینجور موارد.
2) با توجه به مورد 1، اگه کار رو درست انجام بدیم ممکنه بعدا دوباره کارفرما باز هم سفارش بده به برنامه نویس یا اگه کسی نیاز به برنامه نویس داشته باشه و به اون کارفرما مراجعه کنه، ایشون برنامه نویس خودشون رو معرفی کنه.

در ضمن، وجدان اخلاقی و کاری میگه که تا جایی که امکان داره کاری که بهمون محول شده رو بی عیب و نقص انجام بدیم...

===
در مورد سوال تاپیک جواب دادم، مثالی هم نوشتم، فکر میکنم بحث کردن دیگه بی فایده باشه...
من دیگه تو این تاپیک پست نمیدم پس سوالی ازم نپرسید.

با تشکر.
عزیزم اینی که شما نوشتی به نظر من محکم کاری بیش از حد هست که اصلا به درد نمیخوره!!
نیازی به این کارا اصلا نیست !

حتی اگه خود md5 هم به تنهایی استفاده بشه مشکلی نداره!

در ضمن شما فکر حجم دیتابیس هم باش!
 

ziXet

مدیر انجمن PHP/MYSQL
من هش شده یه کد با md5 رو بت میدم اگه درآوردیش اونوقت شما بگو md5 ضعیفه!
 

my friend

Member
من یادم نمیاد گفته باشم که md5 ضعیفه.

اما گفتم استفاده از md5 و sha1 همزمان و به روشی که گفتم خیلی بهتر از استفاده از md5 به تنهایی هست... دلیلش رو هم گفتم.
در مورد حجم دیتابیس، اگه شما 100 هزار کاربر داشته باشی، حجمی که md5 اشغال میکنه حدود 3 مگابایت، حجمی که sha1 اشغال میکنه حدود 4 مگابایت و حجمی که md5+sha1 اشغال میکنه حدود 7 مگابایت هست...
چند تا سایت ایرانی میشناسید که بیشتر از 100 هزار کاربر عضو داشته باشند؟! و سایتی که این تعداد کاربر داره، حتما یک سرور اختصاصی داره و یه سرور هم حداقل 40 گیگابایت فضا رو داره ... 7 مگابایت در مقایسه با 40 گیگابایت فکر نکنم به چشم بیاد؟!

در ضمن، کار از محکم کاری که عیب نمیکنه، میکنه؟!
بهتره همیشه خطر رو در نظر داشت، هرچند احتمالش (9999999999999)/1 باشه...
 

جدیدترین ارسال ها

بالا