ziXet
مدیر انجمن PHP/MYSQL
عزیزم اینی که شما نوشتی به نظر من محکم کاری بیش از حد هست که اصلا به درد نمیخوره!!طرز تفکر هر کسی فرق داره...
وقتی طول مقدار برگشتی بیشتر باشه، از امنیت بیشتری برخورداره. چون همیشه ممکنه دو مقدار x و y در الگوریتم md5 یا sha1 مقدار مشابه برگردونند، اما اینکه x و y هر دو، در الگوریتم های md5 و sha1 مقدار مشابه داشته باشند، بسیار بسیار کمتر هست. برای همین از هر دو الگوریتم بهتره استفاده کنیم.
اینی هم که میگم کاراکترهاشون با هم ادغام بشن برای اینه که اگه این دو تا رو کنار هم بزاریم ($str = md5($str).sha1($str)) جدا کردنشون کاری نداره، مقدار md5 یا 32 کاراکتر اول هست، یا 32 کاراکتر آخر، اما اگه ادغام بشن جدا کردن md5 و sha1 سخت میشه.
پس در مثال بالا ، ()hashi امنیت بیشتری نسبت به ()hashii داره...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))); }
===
برای من فرقی نداره که شما و ایشون از کدوم روش استفاده کنید، اصلا پسورد رو مستقیم وارد دیتابیس بکنید یا نکنید برای من فرقی نداره... اما توصیه میشه که همیشه باید از الگوریتمی استفاده کرد که پیچیده تر هست و برای decrypt کردن زمان+حوصله بیشتری نیاز داشته باشه و این کار باعث میشه:
1) امنیت سیستم رو بالا بره و لازم نیست بعد از مدتی کارفرما رو سر برنامه نویس خراب بشه که آره، سیستمت باگ داره و پولم رو پس بده و خسارت بده و از اینجور موارد.
2) با توجه به مورد 1، اگه کار رو درست انجام بدیم ممکنه بعدا دوباره کارفرما باز هم سفارش بده به برنامه نویس یا اگه کسی نیاز به برنامه نویس داشته باشه و به اون کارفرما مراجعه کنه، ایشون برنامه نویس خودشون رو معرفی کنه.
در ضمن، وجدان اخلاقی و کاری میگه که تا جایی که امکان داره کاری که بهمون محول شده رو بی عیب و نقص انجام بدیم...
===
در مورد سوال تاپیک جواب دادم، مثالی هم نوشتم، فکر میکنم بحث کردن دیگه بی فایده باشه...
من دیگه تو این تاپیک پست نمیدم پس سوالی ازم نپرسید.
با تشکر.
نیازی به این کارا اصلا نیست !
حتی اگه خود md5 هم به تنهایی استفاده بشه مشکلی نداره!
در ضمن شما فکر حجم دیتابیس هم باش!