MD5 Соль Вход в систему - PullRequest
       24

MD5 Соль Вход в систему

0 голосов
/ 15 августа 2011

Эй, парень, я пытаюсь создать систему входа в систему, которая использует шифрование MD5 для пароля. У меня есть шифрование для работы, и все это по какой-то причине, когда я ввожу пароль «palmer» на страницу входа в систему и нажимаю кнопку входа в систему, я заставил его отправить меня на страницу, где он говорит мне зашифрованный пароль и использует «palmer» как пароль, который он выводит, это «Дункан вошел в систему с использованием пароля 4844fd4088ef5278ad18f892808ebda8 - palmer». Пароль в базе данных при шифровании: «4669a6b46c8d891b373cfcd664dff6». Почему два пароля разные? Я использую ту же соль (соль "a123b123".

Ниже приведен мой код, который шифрует пароль при регистрации:

$password = $_POST['password'];

$md5pass = md5($salt.md5($password));

Ниже мой код для входа.

<?php
session_start();
include('config/config.php');

$email = $_POST['email'];
$password = $_POST['password'];
$pass2 = md5($salt.md5($password));

$check = mysql_query("SELECT `email`,`password` FROM user WHERE (`email`='$email' AND       `password`='$pass2')") or die(mysql_error());

$count = mysql_num_rows($check);

//if($count == 1) {
$_SESSION['user'] = strtoupper($user);
//header('Location: /panel/index.php');
echo("Duncan Logged in using password $pass2 - $pass");
//} else {
//$_SESSION['errormsg'] = "<div id='error'><strong>Error:</strong> Invalid Username or Password!</div>";
//header('Location: index.php');
//}
?>

Ответы [ 3 ]

7 голосов
/ 15 августа 2011

Вы должны хранить свою соль - и, пожалуйста, используйте случайную соль, чтобы два пользователя с одинаковым паролем получили разный дайджест! - где-то для дальнейшего использования:

$salt = sha1(getRandomSalt());
$digest = sha1($password.$salt).'$'.$salt; // use sha1 instead of md5

позже вы можете проверить предоставленный пароль с той же солью:

list($stored_pw, $stored_salt) = explode('$', $stored_digest);
if($stored_pw == sha1($user_provided_pw.$stored_salt)) {
  echo 'user provided correct password';
}
3 голосов
/ 15 августа 2011

Вы должны действительно использовать bcrypt для этого.Более подробная информация о bcrypt приведена в предыдущем сообщении о переполнении стека Как использовать bcrypt для хеширования паролей в PHP?

bcrypt считается наиболее безопасным способом реализации хеширования паролей с помощью соли, поскольку он медленный- намного медленнее, чем MD5.

2 голосов
/ 12 мая 2013

Просто небольшой комментарий к решению knittl сверху:

Вам нужно заменить строку

if($stored_pw = sha1($user_provided_pw.$stored_salt)) {

на

if($stored_pw == sha1($user_provided_pw.$stored_salt)) {

, чтобы она заработала.

(я пытался добавить его к сообщению knittl, но там говорится, что изменения должны быть длиной не менее 6 символов)

...