Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 72

Хеширование паролей в бд

22.05.2019, 16:56. Показов 1529. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь сделать так, чтобы при регистрации пользователя на сайте пароль в бд хешировался, а при входе он должен был бы писать всё равно свой обычный пароль

Пишу так, исправьте пожалуйста что не правильно

Здесь пытаюсь зашифровать пользовательский пароль
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   public static function register($name, $email, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
        
        $qwe = 0;
        // Текст запроса к БД
        $sql = 'INSERT INTO user (name, email, password) '
                . 'VALUES (:name, :email, :password)';
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':email', $email, PDO::PARAM_STR);
        $result->bindParam($qwe , ':password', $password = password_hash($qwe, PASSWORD_DEFAULT), PDO::PARAM_STR);
        
        return $result->execute();
    }
Здесь пытаюсь его расшифровать при входе
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<section>
    <div class="container">
        <div class="row">
 
            <div class="col-sm-4 col-sm-offset-4 padding-right">
 
                <?php if (isset($errors) && is_array($errors)): ?>
                    <ul>
                        <?php foreach ($errors as $error): ?>
                            <li> - <?php echo $error; ?></li>
                        <?php endforeach; ?>
                    </ul>
                <?php endif; ?>
 
                <div class="signup-form"><!--sign up form-->
                    <h2>Вход на сайт</h2>
                    <form action="#" method="post">
                        <input type="email" name="email" placeholder="E-mail" value="<?php echo $email; ?>"/>
                        <input type="password" name="password" placeholder="Пароль" value="<?php echo password_verify($qwe, $password); ?>"/>
                        <br/>
                        <input type="submit" name="submit" class="btn btn-default" value="Вход на сайт" />
                    </form>
                </div><!--/sign up form-->
 
 
                <br/>
                <br/>
            </div>
        </div>
    </div>
</section>
В данный момент ошибка такая
Неустранимая ошибка : необработанная ошибка: невозможно передать параметр 2 по ссылке в C: \ Users \ ASUS \ Downloads \ OSPanel \ domains \ enter \ models \ User.php: 30 Трассировка стека: # 0 C: \ Users \ ASUS \ Downloads \ OSPanel \ domains \ enter \ controllers \ UserController.php (47): Пользователь :: регистрация ('\ xD0 \ xA1 \ xD0 \ xB5 \ xD1 \ x80 \ xD0 \ xB3 \ xD0 \ xB5 \ xD0 \ xB9', 'nikitaewf123 @ ma ... ',' 123456 ') # 1 C: \ Users \ ASUS \ Downloads \ OSPanel \ domains \ enter \ components \ Router.php (80): UserController-> actionRegister () # 2 C: \ Users \ ASUS \ Загрузки \ OSPanel \ domains \ enter \ index.php (18): Router-> run () # 3 {main}, брошенный в C: \ Users \ ASUS \ Downloads \ OSPanel \ domains \ enter \ models \ User.php в режиме онлайн 30
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2019, 16:56
Ответы с готовыми решениями:

Как изменить хеширование паролей?
1)Как хешируются пароли в WP 2)Как изменить хеширование?

Хеширование паролей. Генераторы случайных чисел
1. Изучить алгоритмы хеширования паролей. 2. Изучить известные алгоритмы работы генераторов случайных чисел. 3 Проанализировать...

Хеширование паролей: какой алгоритм предпочтительней
Делаю модуль логинизации. Пароли хочу хешировать с помощью System.Security.Cryptography. Через какой алгоритм это лучше делать (с точки...

7
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
22.05.2019, 17:15
Цитата Сообщение от FantazerMasha Посмотреть сообщение
$result->bindParam($qwe , ': password',
параметры переданы в неверной последовательности.

Добавлено через 2 минуты
Цитата Сообщение от FantazerMasha Посмотреть сообщение
$qwe ,
это, похоже, лишнее
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 72
22.05.2019, 17:24  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
параметры переданы в неверной последовательности.

Добавлено через 2 минуты

это, похоже, лишнее
Не понимаю, вот смотрите:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static function register($name, $email, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
        
        // Текст запроса к БД
        $sql = 'INSERT INTO user (name, email, password) '
                . 'VALUES (:name, :email, :password)';
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':email', $email, PDO::PARAM_STR);
        $result->bindParam(':password', $password = password_hash($password, PASSWORD_DEFAULT), PDO::PARAM_STR);
        
        return $result->execute();
    }
Вот это сейчас работает, в бд попадает зашифрованный парорль, но вот такая ошибка всё равно вылазит
Notice: Only variables should be passed by reference in C:\Users\ASUS\Downloads\OSPanel\domains\ enter\models\User.php on line 29

И как и где мне использовать функцию password_verify?

Просто я не понимаю, в какой "переменной" хранится мой нормальный пароль
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
22.05.2019, 17:33
Цитата Сообщение от FantazerMasha Посмотреть сообщение
Only variables should be passed by reference
Цитата Сообщение от FantazerMasha Посмотреть сообщение
$password = password_hash($password, PASSWORD_DEFAULT)
Вот это выражение, а не переменная.
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
22.05.2019, 17:35
Цитата Сообщение от FantazerMasha Посмотреть сообщение
$password = password_hash($password, PASSWORD_DEFAULT)
это обрабатываете до передачи в bind

Далее
PHP
1
$result->bindParam(':password', $password, PDO::PARAM_STR);
Добавлено через 1 минуту
А почему Вы не используете password_hash сразу после отправки данных из формы???
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 72
22.05.2019, 17:51  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
это обрабатываете до передачи в bind

Далее
PHP
1
$result->bindParam(':password', $password, PDO::PARAM_STR);
Добавлено через 1 минуту
А почему Вы не используете password_hash сразу после отправки данных из формы???
Сделаю так если пойму как работает, не доходит и всё))

Спасибо вам, ошибку убрала, сделала так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public static function register($name, $email, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
        
        $passwordqw = password_hash($password, PASSWORD_DEFAULT);
        // Текст запроса к БД
        $sql = 'INSERT INTO user (name, email, password) '
                . 'VALUES (:name, :email, :password)';
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':email', $email, PDO::PARAM_STR);
        $result->bindParam(':password', $passwordqw, PDO::PARAM_STR);
        
        return $result->execute();
    }
В кнопку входа вставила это, по логике вроде всё правильно, ошибок не выводит, но для входа всё равно эти закорючки в пароль писать надо(
PHP
1
 <input type="password" name="password" placeholder="Пароль" value="<?php echo password_verify($password, $passwordqw); ?>"/>
Добавлено через 7 минут
логически понимаю вроде что мой обычный пароль нигде не хранится или что, а как мне сравнить тогда, с чем
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
22.05.2019, 18:21
https://www.php.net/manual/ru/... verify.php
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 72
23.05.2019, 11:44  [ТС]
Помогите пожалуйста кто-нибудь, ну никак не получается, сижу с этим уже второй день, всё перепробовала(

Страница регистрации
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php include ROOT . '/views/layouts/header.php'; ?>
 
<section>
    <div class="container">
        <div class="row">
 
            <div class="col-sm-4 col-sm-offset-4 padding-right">
                
                <?php if ($result): ?>
                    <p>Вы зарегистрированы!</p>
                <?php else: ?>
                    <?php if (isset($errors) && is_array($errors)): ?>
                        <ul>
                            <?php foreach ($errors as $error): ?>
                                <li> - <?php echo $error; ?></li>
                            <?php endforeach; ?>
                        </ul>
                    <?php endif; ?>
 
                    <div class="signup-form"><!--sign up form-->
                        <h2>Регистрация на сайте</h2>
                        <form action="#" method="post">
                            <input type="text" name="name" placeholder="Имя" value="<?php echo $name; ?>"/>
                            <input type="email" name="email" placeholder="E-mail" value="<?php echo $email; ?>"/>
                            <input type="password" name="password" placeholder="Пароль" value="<?php echo $password; ?>"/>
                            <input type="submit" name="submit" class="btn btn-default" value="Регистрация" />
                        </form>
                    </div><!--/sign up form-->
                
                <?php endif; ?>
                <br/>
                <br/>
            </div>
        </div>
    </div>
</section>
 
<?php include ROOT . '/views/layouts/footer.php'; ?>
Модель регистрации:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    public static function register($name, $email, $password)
 {
        // Соединение с БД
        $db = Db::getConnection();
        
        $hash = password_hash($password, PASSWORD_DEFAULT)
        
        // Текст запроса к БД
        $sql = 'INSERT INTO user (name, email, password) '
                . 'VALUES (:name, :email, :password)';
 
        // Получение и возврат результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':name', $name, PDO::PARAM_STR);
        $result->bindParam(':email', $email, PDO::PARAM_STR);
        $result->bindParam(':password', $hash, PDO::PARAM_STR);
        
        return $result->execute();
    }
Экшн регистрации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public function actionRegister()
    {
        // Переменные для формы
        $name = false;
        $email = false;
        $password = false;
        $result = false;
 
        // Обработка формы
        if (isset($_POST['submit'])) {
            // Если форма отправлена 
            // Получаем данные из формы
            $name = $_POST['name'];
            $email = $_POST['email'];
            $password = $_POST['password'];
 
            // Флаг ошибок
            $errors = false;
 
            // Валидация полей
            if (!User::checkName($name)) {
                $errors[] = 'Имя не должно быть короче 2-х символов';
            }
            if (!User::checkEmail($email)) {
                $errors[] = 'Неправильный email';
            }
            if (!User::checkPassword($password)) {
                $errors[] = 'Пароль не должен быть короче 6-ти символов';
            }
            if (User::checkEmailExists($email)) {
                $errors[] = 'Такой email уже используется';
            }
            
            if ($errors == false) {
                // Если ошибок нет
                // Регистрируем пользователя
                $result = User::register($name, $email, $password);
            }
        }
 
        // Подключаем вид
        require_once(ROOT . '/views/user/register.php');
        return true;
    }
Страница авторизации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php include ROOT . '/views/layouts/header.php'; ?>
 
<section>
    <div class="container">
        <div class="row">
 
            <div class="col-sm-4 col-sm-offset-4 padding-right">
 
                <?php if (isset($errors) && is_array($errors)): ?>
                    <ul>
                        <?php foreach ($errors as $error): ?>
                            <li> - <?php echo $error; ?></li>
                        <?php endforeach; ?>
                    </ul>
                <?php endif; ?>
 
                <div class="signup-form"><!--sign up form-->
                    <h2>Вход на сайт</h2>
                    <form action="#" method="post">
                        <input type="email" name="email" placeholder="E-mail" value="<?php echo $email; ?>"/>
                        <input type="password" name="password" placeholder="Пароль" value="<?php echo $password; ?>"/>
                        <br/>
                        <input type="submit" name="submit" class="btn btn-default" value="Вход на сайт" />
                                        
                    </form>
                </div><!--/sign up form-->
 
 
                <br/>
                <br/>
            </div>
        </div>
    </div>
</section>
 
<?php include ROOT . '/views/layouts/footer.php'; ?>
Модель авторизации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public static function checkUserData($email, $password)
    {
        // Соединение с БД
        $db = Db::getConnection();
 
        // Текст запроса к БД
        $sql = 'SELECT * FROM user WHERE email = :email AND password = :password';
 
        // Получение результатов. Используется подготовленный запрос
        $result = $db->prepare($sql);
        $result->bindParam(':email', $email, PDO::PARAM_INT);
        $result->bindParam(':password', $password, PDO::PARAM_INT);
        $result->execute();
 
        // Обращаемся к записи
        $user = $result->fetch();
 
        if ($user) {
            // Если запись существует, возвращаем id пользователя
            return $user['id'];
        }
        return false;
    }
Экшн авторизации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  public function actionLogin()
    {
        // Переменные для формы
        $email = false;
        $password = false;
        
        // Обработка формы
        if (isset($_POST['submit'])) {
            // Если форма отправлена 
            // Получаем данные из формы
            $email = $_POST['email'];
            $password = $_POST['password'];
            
            // Флаг ошибок
            $errors = false;
 
            // Валидация полей
            if (!User::checkEmail($email)) {
                $errors[] = 'Неправильный email';
            }
            if (!User::checkPassword($password)) {
                $errors[] = 'Пароль не должен быть короче 6-ти символов';
            }
/*          User::register($hash);
            User::checkUserData($password); */
 
            // Проверяем существует ли пользователь
            $userId = User::checkUserData($email, $password);
 
            if ($userId == false /* and password_verify($password, $hash) == false */) {
                // Если данные неправильные - показываем ошибку
                $errors[] = 'Неправильные данные для входа на сайт';
            } else {
                // Если данные правильные, запоминаем пользователя (сессия)
                User::auth($userId);
 
                // Перенаправляем пользователя в закрытую часть - кабинет 
                header("Location: /cabinet");
            }
        }
 
        // Подключаем вид
        require_once(ROOT . '/views/user/login.php');
        return true;
    }


Помогите пожалуйста! Прошу! Сроки сильно поджимают, почти всё сделала и на этом застряла...
В данный момент в бд записывается хэш, мне нужно куда-то всунуть password_verify, чтобы у меня хэш из бд сравнивался с введённым пользователем паролем при авторизации
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2019, 11:44
Помогаю со студенческими работами здесь

Генераторы мастер паролей на биосы (сброс неизвестных паролей биоса)
Народ, кто каким пользуется например вот https://bios-pw.org

Создать генератор паролей в котором можно указать длину пароля и количество паролей
Помогите пожалуйста! Задание: Нужно создать генератор паролей в котором можно указать длину пароля и количество паролей то есть длина...

Хеширование
Ребят, помогите пожалуйста сделать лабораторную. Задание (все перечисленные пункты относятся к одной работе): 1) написать функции...

Хеширование
У меня есть вариант хешировани данных для ГОСТ 28147-89. Помогите ее переделать под ГОСТ Р 34.11-94. вот...

Хеширование??
Здравствуйте. Вот задали мне программу на хеширование. Вопрос, Есть ли оно в алгоритме Бойера - Мура???(прога рабочая!). Если нет,то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru