Не могу использовать оригинальный пароль, после ха sh (pgcrypto) - PullRequest
0 голосов
/ 21 апреля 2020

Мне удалось хэшировать мой пароль для моего администратора, теперь проблема заключается в том, что я больше не могу использовать исходный пароль для входа в систему (нет ошибок, кроме правильного ответа для неверных паролей). Я могу выбрать пользовательскую таблицу и просто скопировать хешированный пароль из PGadmin (используя PostgreSQL). Я не совсем уверен, где go отсюда. 1. Я думаю, что мне нужно получить форму для входа в систему, чтобы распознать хешированный пароль и как-то сопоставить его с оригиналом. 2. выяснить, как добавить соль и перец в хеш, я не ищу точное решение, но, возможно, некоторые подсказки, чтобы получить дальше :) Код

function createAdmin(){
    var usertypeid = null;
    const type = "adm";
    pool.query(`INSERT INTO usertype(type) VALUES ($1) RETURNING userTypeId;`, [type], function (error, results) {
        if (error){
            throw error;
        } else{
            usertypeid = results.rows[0].usertypeid;
            console.log(usertypeid);
            insertAdmin();
        }
    });

    function insertAdmin(){
        pool.query(`
                    INSERT INTO users(        
                    usertypeid, userName, email, password)
                    VALUES($1, 'admin', 'admin@admin.com', CRYPT('admin', GEN_SALT('md5')));`, [usertypeid]);
    }
}   

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Как уже упоминалось в комментариях, больше не используйте MD5, поскольку он долгое время устарел go.

Другое дело, что хеширование отличается от шифрования. Вы не можете decrypt ха sh, как вы делаете с шифром.

Что должно произойти, это то, что вы запускаете открытый текст с помощью алгоритма хеширования и затем проверяете, соответствует ли он исходному значению ha sh, вычисленному в начале.

Для Node.js существуют хорошие библиотеки, такие как bcrypt, которые можно использовать для упрощения процесса и, возможно, для повышения его безопасности.

Если вы настаиваете на проведении собственной процедуры проверки , тогда это должно выглядеть следующим образом:

  1. Получить пароль пользователя из формы входа
  2. Запустить его через хеширование al go на ваш выбор (без MD5, пожалуйста)
  3. Запрос к базе данных для хешированного пароля
  4. Сравните, совпадает ли хешированный пароль из формы входа с паролем в БД
0 голосов
/ 21 апреля 2020

Когда в документах написано , вы хотите что-то вроде этого (переименование таблицы и столбца в соответствии с вашим примером):

SELECT (password = crypt('entered password', password)) AS pswmatch FROM users where username='admin';

Значение, сохраненное в users.password из вашей вставки, равно комбинация алгоритма, соли и результата хеширования действительного пароля с этим алгоритмом и солью. Теперь вы снова передаете users.password в crypt, чтобы он мог извлечь из него алгоритм и соль. Затем он использует этот алгоритм и соль для пересчета ха sh предполагаемого пароля. Если пересчитанное значение соответствует сохраненному значению, то предполагаемый пароль правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...