كيف اقوم با عمل مطابقة الباسورد المخزن في القاعدة المشفر با password hash
با باسورد المستخدم.
جربت استخراج الباسورد ثم مطابقته با الباسورد الاخر با دالة password_verify..
لكن اختلط كل شيئ و النهاية كانت فاشلة
قم بتشفير كلمة المرور التي يدخلها المستخدم بنفس الخوارزمية التي استخدمتها لتشفير كلمة المرور عند التسجيل ومن ثم قارنها بما هو موجود بقاعدةالبيانات .,
مثال :
لنفرض في صفحة تسجيل مستخدم جديد قمت بتشفير كلمة المرور كما يلي :
$pass = $_POST['password'];
$pass = sha1($pass);
// insert $pass to db
الان في صفحة تسجيل الدخول استخدم نفس الطريقة شفر كلمة المرور اولا ومن ثم قارنها بماهو موجود بقاعدة البيانات :
$pass = $_POST['password'];
$pass = sha1($pass);
$sql = "SELECT * FROM USERS_TABLE WHERE USER_PASS = '{$pass}'";
// execut $sql
$hash = password_hash("ahmed", PASSWORD_BCRYPT);
if (password_verify('ahmed', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
اخي طريقة هذه صححة في استعمال password_verify لكن انا لدي با سورد في القاعدة و ليس في دالة
سؤالي كان كيف ب امكاني مطابقته با استعمال password verify في الاستعلام
SELECT * ....... WHERE pass=password_verify()....
لكنها لم تنجح
في حالة إستخدام دالة password_hash بدون salt سيتم توليده تلقائياً وعلى هذا سيختلف التشفير الناتج في كل مرة لنفس النص.
لهذا عليك تحديد salt ثابت يتم إستخدامه مع دالة password_hash عند تشفير كلمات المرور قبل تخزينها في قاعدة البيانات كالتالي:
$password = 'ahmed';
$salt = 'AFgfd%^GhjggdFGDGDGD@##%df';
$password = password_hash($password, PASSWORD_BCRYPT, ['salt'=>$salt]);
$query = "INSERT INTO tableName (password) VALUES ('$password')";
وعند عملية التحقق في قاعدة البيانات ستقوم بإستخدام نفس الـ salt لنفس كلمة المرور للتحقق من وجودها في قاعدة البيانات كالتالي:
$password = 'ahmed';
$salt = 'AFgfd%^GhjggdFGDGDGD@##%df';
$password = password_hash($password, PASSWORD_BCRYPT, ['salt'=>$salt]);
$query = "SELECT * FROM tableName WHERE password='$password'";
التعليقات