2014-12-01 3 views
0

Мне интересно, как я мог бы заставить свою маленькую Программу работать. Все, что мне нужно, это когда я набираю свой пароль, который равен Password321!, чтобы сравнить с хэшированным паролем в базе данных MS SQL под столбцом Password, я попытался использовать PWDCOMPARE('Password321!', Password);, но это не сработало для меня. Появляется сообщение об ошибке Ошибка конверсии при преобразовании значения nvarchar 'nEg5JzRQHD8P7VOwwIkeaDx6WEs =' в тип данных int. Вот мой код:MS SQL hashed пароль по сравнению с обычным текстом

select Password from aspnet_Membership where Password=PWDCOMPARE('Password321!', Password); 

Пожалуйста, помогите,

Благодаря

M

+0

Вы можете использовать PWDCOMPARE ('Password321!', Пароль) только тогда, когда вы знаете, password_hash.Because PWDCOMPARE сравнивает свой пароль text_format с password_hash. например, 'SELECT SL.name, PWDCOMPARE (' ******** ', ** SL.password_hash **) password_match FROM sys.sql_logins AS SL WHERE SL.name =' ALogin ';' –

ответ

0

Если вы используете сервер SQL для аутентификации пользователей, вы должны попытаться использовать лучшие методы, чтобы свести к минимуму возможность SQL Injection на вашем веб-сервере.

Нижеприведенный запрос является хорошим примером использования аутентификации SHA1 для аутентификации пользователей при входе в систему. Обратите внимание, что это не реализация Java, но она должна дать вам хорошее представление о том, что вы делаете неправильно.

sql = "SELECT user_id, user_name, user_level 
     FROM users 
     WHERE user_name = '" . mysql_real_escape_string($_POST['user_name']) . "' 
     AND user_pass = '" . sha1($_POST['user_pass']) . "'"; 
+0

Спасибо за ответ, я только что удалил MD5 Hash с моего сайта и теперь использую SHA-256, который будет лучше для меня. SHA1 прекратит работу в 2016 или 2017 году, как я читал в Интернете.Также я попытаюсь сделать SQL-запросы с формой, чтобы иметь меньше проблем с SQL Injection на MS SQL. – user3069367

2

Для SQL Server, PWDCOMPARE() возвращает значение INT 1, если данный пароль mataces еще возвращает 0

PWDCOMPARE

Hashes a password and compares the hash to the hash of an existing password. 

СИНТАКСИС:

PWDCOMPARE ('clear_text_password', password_hash [ , version ]) 

Возвращает 1, если хэш поля clear_text_password соответствует параметру password_hash и 0, если это не так.

Измените запрос, как это,

SELECT Password 
FROM aspnet_Membership 
WHERE PWDCOMPARE('Password321!', Password) = 1; 

Или вы можете использовать PWDENCRYPT()

PWDENCRYPT:

Returns the SQL Server password hash of the input value that uses the current 
version of the password hashing algorithm. 

СИНТАКСИС:

PWDENCRYPT ('password') 

Измените запрос, как это,

SELECT Password 
FROM aspnet_Membership 
WHERE Password = PWDENCRYPT('Password321!'); 
+0

Ссылки на соответствующую документацию (в интересах показать, как вы знали, что именно так и был ответ) сделают это еще лучшим ответом. –

+0

Ok Я попробовал: SELECT Password FROM aspnet_Membership ГДЕ PWDCOMPARE ('Password321!', Password) = 1; Выход ничего не было, но если вы поставите 0 поставляется с данными Далее я попытался было: ВЫБРАТЬ Пароль, PWDCOMPARE ('Password321!', Пароль) password_match ОТ aspnet_Membership, aspnet_Users WHERE UserName = 'Admin'; Пароль Match = 0; Я использовал пример Прахара Ашханы, для sa и который вернул 1. Все, что я сделал, использует членство из asp.net с помощью aspnet_regsql.exe, затем используйте CreateUserWizard из панели инструментов asp.net и сделал учетную запись с паролем, но не соответствует. – user3069367

Смежные вопросы