روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ کیان سلگی
مشکل در مقایسه پسورد معمولی با پسورد هش شده
جامعه پی اچ پی ایجاد شده در ۱۰ آذر ۱۴۰۰
<p>سلام وقت بخیر</p><p>در مورد هش کردن پسورد و بررسی اون سوال داشتم</p><p>1- زمانی که پسورد رو هش میکنم به صورت هش شده داخل دیتابیس ثبت میشه اما همون رمز رو مجدد میزنم به یه کاراکتر‌های دیگه تبدیل شده یعنی هر بار که یک پسورد رو هش میکنم به شکل‌های مختلفی تبدیل میشه</p><p>2- زمانی که میخام پسورد وارد شده توسط کاربر رو با پسورد هش شده داخل دیتابیس بررسی کنم همیشه این دوتا همخونی نداره</p><p>ممنون میشم راهنمایی کنید</p><pre class=\"ql-syntax\" spellcheck=\"false\"><span class=\"hljs-keyword\">if</span>(<span class=\"hljs-variable\">$_SERVER</span>[<span class=\"hljs-string\">\'REQUEST_METHOD\'</span>] == <span class=\"hljs-string\">\"POST\"</span> && <span class=\"hljs-keyword\">isset</span>(<span class=\"hljs-variable\">$_POST</span>[<span class=\"hljs-string\">\'login\'</span>])){     <span class=\"hljs-variable\">$data</span> = [<span class=\"hljs-string\">\'email\'</span> => <span class=\"hljs-variable\">$_POST</span>[<span class=\"hljs-string\">\'Email\'</span>], <span class=\"hljs-string\">\'password\'</span> => <span class=\"hljs-variable\">$_POST</span>[<span class=\"hljs-string\">\'Password\'</span>]];     login(<span class=\"hljs-variable\">$data</span>); } ////////////// function register($data) {     global $connection;     $password = $data[\'password\'];     $uppercase = preg_match(\'@[A-Z]@\', $password);     $lowercase = preg_match(\'@[a-z]@\', $password);     $number    = preg_match(\'@[0-9]@\', $password);     $specialChars = preg_match(\'@[^\\w]@\', $password);     if (!$uppercase || !$lowercase || !$number || !$specialChars || strlen($password) < 8) {         return \'Password should be at least 8 characters in length and should include at least one upper case letter, one number, and one special character.\';     } else {         $password_hash = password_hash($password,PASSWORD_DEFAULT);         $query = \"INSERT INTO users (name,family,username,password,email) VALUES (:name , :family , :username , :password , :email)\";         $stmt = $connection->prepare($query);         $stmt->execute([\'name\' => $data[\'name\'], \'family\' => $data[\'family\'], \'username\' => $data[\'username\'], \'password\' => $password_hash, \'email\' => $data[\"email\"]]);         return $stmt->rowCount();     }     } function get_user_info($data){     global $connection ;     $query = \"SELECT * FROM users WHERE email =:email\"; $stmt = $connection->prepare($query); $stmt->execute([\'email\' => $data[\'email\']]); $res = $stmt->rowCount(); if($res == 1){     $user_info =$stmt->fetchObject();     return $user_info; } else{     return \"user not found\"; } } function login($info){ $user_info = get_user_info($info);     echo $info[\'password\'] . \"<br>\";     echo $user_info->password . \"<br>\"; if(password_verify($info[\'password\'],$user_info->password)){     echo \"login successfully\"; } else{     echo \"incorroct data\"; } } </pre>
<p>سلام. </p><p>کدهای هش پسورد رو بگذارید. </p><p>یعنی چه کدهایی منجر به خروجی password_hash میشن. </p><p><br></p>
محسن موحد ۱۰ آذر ۱۴۰۰، ۱۲:۲۴
<pre class="ql-syntax" spellcheck="false"><span class="hljs-keyword">if</span>(<span class="hljs-variable">$_SERVER</span>[<span class="hljs-string">'REQUEST_METHOD'</span>] == <span class="hljs-string">"POST"</span> && <span class="hljs-keyword">isset</span>(<span class="hljs-variable">$_POST</span>[<span class="hljs-string">'login'</span>])){     <span class="hljs-variable">$data</span> = [<span class="hljs-string">'email'</span> => <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'Email'</span>], <span class="hljs-string">'password'</span> => <span class="hljs-variable">$_POST</span>[<span class="hljs-string">'Password'</span>]];     login(<span class="hljs-variable">$data</span>); } <span class="hljs-comment">///////////////</span> function register($data) {     global $connection;     $password = $data['password'];     $uppercase = preg_match('@[A-Z]@', $password);     $lowercase = preg_match('@[a-z]@', $password);     $number    = preg_match('@[0-9]@', $password);     $specialChars = preg_match('@[^\\w]@', $password);     if (!$uppercase || !$lowercase || !$number || !$specialChars || strlen($password) < 8) {         return 'Password should be at least 8 characters in length and should include at least one upper case letter, one number, and one special character.';     } else {         $password_hash = password_hash($password,PASSWORD_DEFAULT);         $query = "INSERT INTO users (name,family,username,password,email) VALUES (:name , :family , :username , :password , :email)";         $stmt = $connection->prepare($query);         $stmt->execute(['name' => $data['name'], 'family' => $data['family'], 'username' => $data['username'], 'password' => $password_hash, 'email' => $data["email"]]);         return $stmt->rowCount();     }     } function get_user_info($data){     global $connection ;     $query = "SELECT * FROM users WHERE email =:email"; $stmt = $connection->prepare($query); $stmt->execute(['email' => $data['email']]); $res = $stmt->rowCount(); if($res == 1){     $user_info =$stmt->fetchObject();     return $user_info; } else{     return "user not found"; } } function login($info){ $user_info = get_user_info($info);     echo $info['password'] . "<br>";     echo $user_info->password . "<br>"; if(password_verify($info['password'],$user_info->password)){     echo "login successfully"; } else{     echo "incorroct data"; } } </pre>
کیان سلگی ۱۰ آذر ۱۴۰۰، ۱۲:۳۴
<pre class="ql-syntax" spellcheck="false"> $password_hash = password_hash($password,PASSWORD_DEFAULT); </pre>
کیان سلگی ۱۰ آذر ۱۴۰۰، ۱۲:۳۶
<p>خروجی این الگوریتم از چند قسمت تشکیل شده که قسمت salt هربار تغییر میکنه(برای امنیت بیشتر پسورد). خروجی passwor_hash رو باید با password_verify چک کنید. </p>
بهترین پاسخ
محسن موحد ۱۰ آذر ۱۴۰۰، ۱۳:۰۶