تابع 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 استفاده نمایید .

لیست نظرات

  1. محمود رنجبر نورآبادی
    محمود رنجبر نورآبادی

    سلام خدا قوت این نمکی که به پسورد اضافه میشه اگر اگر دو پیکرد رو برگردونه با مقایسه اونها با هم میتونه نمک رو تشخیص بده درسته ؟

    12 بهمن 1400 | 16:55:29
  • حسین باقری
    حسین باقری

    درود ، بله تشخیص میده .

    20 بهمن 1400 | 16:00:52
contact us