Как сменить хэш PHP с MD5 на SHA256?
Как сменить ХЭШ с MD5 на SHA256 авторизации?
auth.php:
if(empty($_COOKIE["pass"]) || $_COOKIE["pass"]==""){ header("Location: login.php"); } else{ $per = explode(":", $_COOKIE["pass"]); $pass_md5 = $per[0]; $login = $per[1]; $search = mysql_query("SELECT * From ".$account['table']." WHERE ".$account['name']."='$login'"); $user = mysql_fetch_array($search); if($pass_md5 != md5(md5($user["".$account['pass'].""]))){ setcookie("pass", "", 0, "/"); header("Location: login.php"); } } //?> |
if(empty($_COOKIE["pass"]) || $_COOKIE["pass"]==""){ header("Location: login.php"); } else{ $per = explode(":", $_COOKIE["pass"]); $pass_md5 = $per[0]; $login = $per[1]; $search = mysql_query("SELECT * From ".$account['table']." WHERE ".$account['name']."='$login'"); $user = mysql_fetch_array($search); if($pass_md5 != md5(md5($user["".$account['pass'].""]))){ setcookie("pass", "", 0, "/"); header("Location: login.php"); } } //?>
authorization.php:
if(isset($_POST['login'])) { $name = $_POST['nick']; $password = $_POST['password']; $search = mysql_query("SELECT * FROM `".$account['table']."` WHERE `".$account['name']."`='$name'"); if(mysql_num_rows($search)!=0) { $user = mysql_fetch_array($search); if($user["".$account['pass'].""]==$password) { setcookie("pass", md5(md5($password)).":".$name, time() + 60*100, "/"); header("Location: ./"); } else { //$info_pass="<div class="alert alert-danger"> //<strong>Ошибка!</strong> Пароль не правильный. //</div>"; $info_pass="<div class="alert alert-danger"> <strong>Ошибка!</strong> Пароль не правильный. </div>"; } } else { $info_user = "<div class="alert alert-danger"> <strong>Ошибка!</strong> Игрок не найден. </div>"; } } if($_GET["access"]=="exit"){ setcookie("pass", "", "0", "/"); header("Location: ./login.php"); } ?> |
if(isset($_POST['login'])) { $name = $_POST['nick']; $password = $_POST['password']; $search = mysql_query("SELECT * FROM `".$account['table']."` WHERE `".$account['name']."`='$name'"); if(mysql_num_rows($search)!=0) { $user = mysql_fetch_array($search); if($user["".$account['pass'].""]==$password) { setcookie("pass", md5(md5($password)).":".$name, time() + 60*100, "/"); header("Location: ./"); } else { //$info_pass="<div class="alert alert-danger"> //<strong>Ошибка!</strong> Пароль не правильный. //</div>"; $info_pass="<div class="alert alert-danger"> <strong>Ошибка!</strong> Пароль не правильный. </div>"; } } else { $info_user = "<div class="alert alert-danger"> <strong>Ошибка!</strong> Игрок не найден. </div>"; } } if($_GET["access"]=="exit"){ setcookie("pass", "", "0", "/"); header("Location: ./login.php"); } ?>
Дополнительно:
Обратиться за помощью на фриланс.
Это ресурс где помогают в решение проблемы, а не делают всё работу за вас. Предложите вариант вашего решения, а мы поможет если что-то не работает.
П.С А вообще за такой код вас должны расстрелять и четвертовать, чтобы больше не писали такое гавно.
2. Вам просто поменять, или уже есть база пользователей?
1. нужно сделать так, чтобы новые регистрации проходили с новым алгоритмом хеширования.
2. Пользователям нужно дать флаг старый/новый алгоритм
3. При логине проверять. Если используется старый алгоритм и пароль верный, то обновить хэш на новый и снять флаг.
Постепенно пользователи сами обновят пароли.
Или пойти жестким путём – обновить код аутентификации и регистрации на новый алгоритм, и всем пользователям предложить сбросить пароли, иначе говоря, пройти процедуру восстановления пароля.
Ответы:
Попробуйте так:
auth.php:
$pass_sha256 = hash('sha256', $user["".$account['pass'].""]); // Хеширование пароля с помощью SHA256 if(!hash_equals($pass_sha256, hash('sha256', $password))) { setcookie("pass", "", 0, "/"); header("Location: login.php"); } |
$pass_sha256 = hash('sha256', $user["".$account['pass'].""]); // Хеширование пароля с помощью SHA256 if(!hash_equals($pass_sha256, hash('sha256', $password))) { setcookie("pass", "", 0, "/"); header("Location: login.php"); }
authorization.php:
if($user["".$account['pass'].""]==$password) { $pass_sha256 = hash('sha256', $password); // Хеширование пароля с помощью SHA256 setcookie("pass", $pass_sha256 . ":" . $name, time() + 60*100, "/"); header("Location: ./"); } |
if($user["".$account['pass'].""]==$password) { $pass_sha256 = hash('sha256', $password); // Хеширование пароля с помощью SHA256 setcookie("pass", $pass_sha256 . ":" . $name, time() + 60*100, "/"); header("Location: ./"); }
- "Хороший" ChatGPT ответ.
- Не вышло:(
- tukreb, не отрицаю. Первое, что нужно сделать - это загуглить. В прошлого года появился ещё один вариант - спросить в ChatGPT. Если человек этого не сделал, ничего не запрещает это сделать мне и предоставить ответ
- coder_43, что именно у вас не вышло? Где возникла проблема?
- Nik Faraday, вообщем то такое ровно не приветствуется. Если уж вы даете ответ в правильности которого у вас уверенности никакой - проверьте его сами. А учитывая что чатгпт косячит через раз - загаживать интернет - идея дерьмовая
- Nik Faraday, пишу пасс пишет неверный
- Nik Faraday,
- coder_43, забыл за верификацию пароля:
if(hash_equals($stored_password, hash('sha256', $entered_password)))
if(hash_equals($stored_password, hash('sha256', $entered_password)))
- Nik Faraday, также
- coder_43, стойте, вы пытаетесь залогиниться используя старый пароль из БД?
- Nik Faraday, совершенно верно но пароль генерит, сама игра а сайт должен читать пароль на вход в ЛК SHA256 с солью
- coder_43, стоп стоп стоп. Это два различных алгоритма, которые выдают разный хэш. Вы не сможете войти в систему, если у вас в БД записан пароль, который хэширован как md5, а вы пытаетесь сделать логин по алгоритму sha256
- Nik Faraday, нет в БД уже идёт всё на SHA256. MD5 только в этих файлах больше не где нету
- coder_43, попробуйте перерегистрировать юзера. Так же, для начала, используйте пароль без соли. Так должно работать. В указанном примере кода нет регистрации юзера и внесения его в БД вместе с солью. Так же нет фрагментов кода, которые вы используете для верификации пароля после внесённых изменений
- Nik Faraday, да ибо регистрация юзера происходит на этапе в игре через Pawn, соответственно, регистрировать юзера мне не нужно. Мне нужно его авторизовать
- coder_43, вам нужно его перерегистрировать, что бы обновился хэш. Без соли
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для смены хэша PHP с MD5 на SHA256 вам необходимо выполнить следующие шаги:
1. Используйте функцию hash() вместо md5() для генерации SHA256 хэша. Функция hash() позволяет использовать различные алгоритмы хэширования, включая SHA256.
2. Пример кода для генерации SHA256 хэша:
$data = 'Hello, World!'; $sha256_hash = hash('sha256', $data); echo $sha256_hash;
3. Обратите внимание, что SHA256 хэш будет иметь длину 64 символа (в отличие от 32 символов для MD5).
4. Убедитесь, что ваш сервер поддерживает алгоритм SHA256. В большинстве случаев это не является проблемой, так как SHA256 является стандартным алгоритмом хэширования.
5. Проверьте, что вы используете актуальную версию PHP, которая поддерживает функцию hash().
6. При изменении хэша на более безопасный алгоритм, такой как SHA256, убедитесь, что ваше приложение корректно обрабатывает новый формат хэша.
Следуя этим шагам, вы сможете легко сменить хэш PHP с MD5 на более безопасный SHA256.