آموزش هشینگ-قسمت پایانی

۱۳۸۹/۱۱/۲۱

با توجه به بحث هایی که در دو پست قبلی آموزش هشینگ بیان شد بهتر دبدم تا یک جمع بندی کلی از موضوع داشته باشم و راهکارهایی برای این موضوع ارائه بدم.با این اوصاف بهتر دیدم تا مشکلات و خواسته هایمان را در مورد مسئله هشینگ در قالب یک کلاس بیان کنم که در برنامه هابی وب قابل استفاده باشد.

class PassHash {

        // blowfish
        private static $algo = '$2a';

        // پارامتر ارزشی
        private static $cost = '$10';

        // اساسا برای استفاده داخلی
        public static function unique_salt() {
                return substr(sha1(mt_rand()),0,22);
        }

        //این مورد برای تولید مقدار هش استفاده میشود
        public static function hash($password) {

                return crypt($password,
                                        self::$algo .
                                        self::$cost .
                                        '$' . self::unique_salt());

        }

        // برای مقایسه مقدار هش با پسورد وارد شده استفاده میشود
        public static function check_password($hash, $password) {

                $full_salt = substr($hash, 0, 29);

                $new_hash = crypt($password, $full_salt);

                return ($hash == $new_hash);

        }

}

نحوه استفاده این کلاس در هنگام ثبت نام کاربر:

//فراخونی کلاس
require ("PassHash.php");

// خواندن اطلاعات از $_POST
// ...

//استفاده افرم ولیدیشن
// ...

// هش پسورد
$pass_hash = PassHash::hash($_POST['password']);

// همه ی موارد به جز $_POST['password'] در دیتابیس ذخیره میشود
// در عوض مقدار هش پسورد $pass_hash ذخیره میشود
// ...

پروسه لاگین کاربر با پسورد هش شد:

//استفاده از کلاس 
require ("PassHash.php");  
    
// مقدار هش شده را با پسورد وارد شده مقایسه میکنیم  
if (PassHash::check_password($user['pass_hash'], $_POST['password']) {  
    // اگر مقدار صحیح بود اجازه دسترسی میدیم 
    // ...  
} else {  
    // اگر مقدار صحیح نبود اجازه دسترسی نمیدیم  
    // ...  
} 

یک نکته در مورد قابل استفاده بودن blowfish

الگوریتم Blowfish ممکن است در تمامی سیستم ها اجرا نشود،با این وضعیت سیستم خودتون رو با این کد چک کنید:

if (CRYPT_BLOWFISH == 1) {
        echo "Yes";
} else {
        echo "No";
}

البته بعد از پی اچ پی ۵٫۳ دیگه نیاز نیست چندان نگران باشید.

پایان:
این روش هش کردن به اندازه کافی برای برنامه ی وب مناسب و قابل اطمینان خواهد بود،تا یادم نرفته این رو هم بگم،شما نیاز دارید تا پسورد کاربران را با استفاده از حداقل طول،ادغام کاراکترها ، اعداد و کاراکتراهای ویژه قویتر کنید.

1 دیدگاه در “آموزش هشینگ-قسمت پایانی

  1. free software download در گفت:

    i take a fancy choose it آموزش هشینگ-قسمت پایانی | PHPDevelopers.ir now im your rss reader

    پاسخ

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: