خوب اینکه نمی شه علتش اینه که پسورد ها قبل از اینکه با متد MD5 بخوان Hash بشن و توی بانک نوشته بشن، اول با یه رشتهء رندم دیگه Salt می شن(یعنی نمکشون زیاد می شه اصتلاحا)، که اون رشته رندم با استفاده از همون فیلد معروف secret فایل configuration.php تولید می شه.
مثلا :
کد:var $secret = 'tiDvqWRGWhlKLNHR';
حالا کلا یعنی، پسوردی که الان تو بانک ذخیره شده، برای مثال :به این صورت ِ :کد:Username: user Password: pass
که اینطوری درست شده :کد:username = user password = ea92823e6a5118fde6068c343fefc292:WTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER
جوملا یه رشته 32 بیتی رندم درست کرده که اینه تو این مثال :
که همون مقدار salt هست.کد:salt = WTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER
حالا پسورد رو که pass باشه به این صورت hash می کنه و بعدم مثل اون بالا که گفتم، یه ':' رو هم به عنوان فیلد جدا کننده استفاده می کنه و اون رشتهء رندم رو هم بهش اضافه می کنه. که می شه :
حالا چطور می شه این پسورد encrypt شده رو decrypt کرد؟کد:password = MD5(passWTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER) + ':' + WTiMBzsVhCMvZbnZbUqfWaVA3AZ5YzER
جوابش هم ساده است، اصلا نمی شه.
خود جوملا وقتی می خواد ببینه یه یوزر و پسورد مچ هست یا نه، از روی فیلد یوزر، مقدار salt رو پیدا می کنه و پسورد وارد شده رو دوباره hash می کنه و چک می کنه که با بخش اول فیلد پسورد مچ باشه.
خلاصه، نمی تونی با یه کوئری با شرط چک کردن مقدار فیلد پسورد کاری از پیش ببری...





علاقه مندی ها (Bookmarks)