В моем приложении функция SQL HASHBYTES возвращает разные значения для одной и той же строки. Ниже приведен код моего пользователя.SQL HASHBYTES возвращает другое значение
Guid fillerG = Guid.NewGuid();
using (SqlCommand com = new SqlCommand("INSERT INTO App_Users (UserName, PasswordHash, PasswordSalt) VALUES ('" + userNameTxt.Text + "', HASHBYTES ('SHA1', CONVERT(NVARCHAR(100), '" + userPassword.Text + fillerG.ToString() + "')), '" + fillerG.ToString() + "'; ", con))
{
com.ExecuteNonQuery();
}
Когда я сравниваю приведенный выше вставленный ряд на моей странице входа, он не соответствует. Это мой скрипт сравнения.
SqlCommand loginCom = new SqlCommand("select COUNT(UserID) FROM App_Users WHERE UserName = '" + Login1.UserName + "' AND PasswordHash = HASHBYTES('SHA1', '" + Login1.Password + "' + CONVERT(NVARCHAR(36), PasswordSalt))", loginCon);
Первый код хранит passwordHash как это:
0xDAC9280F85B40C06314228876717E342432807DB
Но в окне запроса, функция HASHBYTES с теми же возвращает значение этого:
0xA561FBD35713F922AD761594658C193F12B82791
UPDATE: Проверьте это изображение. Хэш пароля, хранящийся в коде, отличается от пароля, сгенерированного запросом (пароль Я дал это «ее»)
hashbytes является детерминированной функцией , Если вы загружаете тот же вход с использованием той же функции хэширования, вы получите тот же результат. Единственный вывод состоит в том, что две строки НЕ являются фактически равными. Я бы напечатал обе строки, проверил лидирующие/конечные, пробелы, невидимые символы и кодировку. – Xedni