تابع password_hash رمزنگاری امن در PHP

تابع password_hash رمزنگاری امن در PHP

تابع password_hash – برای رمزنگاری امن در PHP راه های مختلفی وجود دارد اما توصیه وب سایت رسمی PHP استفاده از password_hash است .

که قابلیت منحصر به فردی که دارد این است که رمز هش شده الان با 1 ثانیه بعد فرق دارد .

تابع password_hash دارای 3 ورودی است 2 ورودی اول ( اجباری ) :
1- رمز عبور یا رشته ای که میخواهید hash شود
2- نوع الگوریتم hashing
3- تنظیمات متناسب با ورودی 2 ( آرایه )


ابتدا رمز عبور یا رشته را داخل متغیری با نام password ذخیره می کنیم :

$password = "rapidcode123456";


الگوریتم هش PASSWORD_BCRYPT

اولین مورد است و از نسخه 5.5 در دسترس است . خروجی هش شده ی آن 60 کاراکتر است .

آرگومان های قابل استفاده برای ورودی سوم متناسب با این تابع :

1- salt : اطلاعاتی که با password ادغام می شود باید 22 کاراکتر باشد ( از نسخه 7 به بعد منسوخ شده ! )
2- cost : میزان پردازش برای هش پسورد ( پیشفرض 10 ) توصیه می شود تغییر داده نشود هر چقدر عدد بالاتر باشد منابع سخت افزاری بیشتری به کار گرفته می شود .

$option = [
	"cost" => "10"
];

echo password_hash($password , PASSWORD_BCRYPT , $option);


الگوریتم هش PASSWORD_ARGON2I

از نسخه 7.2.0 قابل دسترس است . خروجی هش شده ی PASSWORD_ARGON2I حدود 100 کاراکتر است .

آرگومان های قابل استفاده برای ورودی سوم متناسب با تابع PASSWORD_ARGON2I :

1- time_cost : حداکثر تعدادی که می تواند برای محاسبه هش پسورد داشته باشد . ( پیشفرض 2 )
2- memory_cost : حداکثر حافظه برای محاسبه هش پسورد ( پیشفرض 1024 )
3- threads : تعداد کانالی که از پردازشگری مرکزی سرور برای محاسبه هش پسورد به طور همزمان استفاده می کند ( پیشفرض 2 )

$option = [
	"time_cost" => 5,
	"memory_cost" => 2048,
	"threads" => 4
];

echo password_hash($password , PASSWORD_ARGON2I , $option); 


الگوریتم هش PASSWORD_ARGON2ID

از نسخه 7.0.3 در دسترس است . مشابه الگوریتم قبلی اما دارای تفاوت در الگوریتم هش پسورد .
ورودی 3 هم همان آرگومان های PASSWORD_ARGON2I .

$option = [
	"time_cost" => 3,
	"memory_cost" => 2048,
	"threads" => 6
];

echo password_hash($password , PASSWORD_ARGON2ID , $option);


الگوریتم هش PASSWORD_DEFAULT

همانطور که از نامش پیداست از میان 3 الگوریتم اصلی hashing با توجه به کانفیگ سرور یکی را در نظر می گیرد که معمولا PASSWORD_BCRYPT است ، ورودی سوم با توجه به نوع الگورتیم هشینگ داده می شود .

echo password_hash($password , PASSWORD_DEFAULT); 


چگونه پسورد غیر hash شده را با hash شده مقایسه کنیم ؟

از آن جایی که تابع password_hash در هر ثانیه تغیر می کند نمی توان از آن برای مقایسه استفاده کرد ، برای این موضوع تابعی وجود دارد به نام password_verify که دارای 2 ورودی (اجباری) است :

1- پسورد خام ( غیر هش شده )
2- پسورد هش شده

که پس از مقایسه در صورتی که پسورد با هش آن مطابقت داشت مقدار true و در غیر اینصورت false بازگردانده می شود .

$hashed_password = '$2y$10$hipD4rI3xER631IL.wJIAupFXOHGMN1C.KjotGIe/8HHVH7nnucoe';
if(password_verify($password , $hashed_password)){
	echo "Login User (:";
}


رمزنگاری اطلاعات

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us