Возвращаемое значение базы данных изменяется - PullRequest
0 голосов
/ 06 апреля 2020

Я делаю экран входа в систему и хочу сравнить значения с сохраненными значениями в моей базе данных. Из соображений безопасности я хэшировал сохраненные пароли, чтобы их нельзя было прочитать.

Проблема, с которой я столкнулся, заключается в том, что возврат из базы данных не совпадает с сохраненным значением в базе данных.

Сохраненное значение ??\u0013)??V\a!?=:???\u0016x\u0013??

Возвращаемое значение ??\\u0013)??V\\a!?=:???\\u0016x\\u0013??

, как вы видите, sla sh удваивается в возвращаемой строке.

У меня следующий вопрос: где код удваивает косую черту и как я могу это остановить?

Заранее благодарю за помощь!



    private Tuple<bool, string> AskPassword(int zone)
            {
                PendingOrdersReadTableAdapters.PersoneelTableAdapter personeelTableAdapter = new PendingOrdersReadTableAdapters.PersoneelTableAdapter() { Connection = { ConnectionString = CppImport.returnConnectionString() } };
                DataTable myData;

                UserLogin userLogin = new UserLogin();
                Start:
                // Show testDialog as a modal dialog and determine if DialogResult = OK.
                if (userLogin.ShowDialog(this) == DialogResult.OK)
                {
                    string username = userLogin.getUser();
                    //get the data connected to this username
                    myData = personeelTableAdapter.GetByName(username);
                    int userSalt = Convert.ToInt32(myData.Rows[0]["Salt"]);

                    Password pwd = new Password(userLogin.getPassword(), userSalt);
                    // UsergivenPassword is ??\u0013)??V\a!?=:???\u0016x\u0013?? 
                    string userGivenPassword = pwd.ComputeSaltedHash();
                    // savedPassword is ??\\u0013)??V\\a!?=:???\\u0016x\\u0013?? 
                    var savedPassword = myData.Rows[0]["SaltedHash"];
                    if (userGivenPassword == savedPassword ) { return Tuple.Create(true, username); }
                    else { MessageBox.Show("Wachtwoord niet correct"); goto Start; }

                }
                else
                {
                    userLogin.Dispose();
                    return Tuple.Create(false,string.Empty);
                }

            }

1 Ответ

1 голос
/ 06 апреля 2020

Я так понимаю, что возвращаемое значение является строкой. Во многих системах символ '\' обозначает символ команды, например, "\n" для новой строки.

Чтобы иметь символ '\' для отображения в строке, вы должны поместить "\\" в строку. Я подозреваю, что ваше поле базы данных является строкой, поэтому оно добавляет дополнительный символ '\', чтобы следующий код символа Unicode отображался правильно.

На ум приходят два момента:

  1. Вы уверены, что храните хешированный пароль?

  2. Обычно вы сравниваете значения хешированного / зашифрованного пароля без обратного преобразования.

edit

Вы правы, проверив, Access не появляется, чтобы позволить вам сохранить двоичное поле. Хешированный пароль будет двоичным, может ли быть проблема с хранением пароля, например, при автоматическом добавлении Access при вводе поля в символ '\'?

Попробуйте преобразовать хешированный пароль в строковое представление hex например, 320A4F ... перед хранением. Затем вы можете сравнить эту строку, а не хеш-значение. Класс

SoapHexBinary может вам помочь.

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