2013-08-01 2 views
2

Я создаю форму для входа, и я хочу, чтобы пароль был чувствительным к регистру. Я написал следующий код. Как я могу сделать его чувствительным к регистру, используя предложение where.Case Sensitive, где запрос

PreparedStatement stm = con.prepareStatement(" select * from user where userid =? and password =?"); 

stm.setString(1, userid); 
stm.setString(2, pswd);   
ResultSet rs =stm.executeQuery(); 
if (!rs.next()) { 
    JOptionPane.showMessageDialog(this, "Invalid Id/Password"); 
} 

ответ

2

Помимо предложения другого лучшего предложения, вы можете попробовать использовать BINARY OPERATOR, что заставит MySQL проверить конкретный случай.

select * from user where userid=? and BINARY password=? 

IMHO, Martijn's answer - это тот, который вы должны следовать.

+0

Спасибо. Это сработало :) – Malwaregeek

4

Ну, пароль должен быть хэшируются (по крайней мере!) С функциями, как sha1. Sha1 возвращает целое другое значение для разных капиталов.

Если у вас есть случайные результаты, вы, вероятно, сохраняете его простым текстом, который должен быть изменен FIRST THING!

String - sha1 value 
example - c3499c2729730a7f807efb8676a92dcb6f8a3f8f 
Example - 0f01ed56a1e32a05e5ef96e4d779f34784af9a96 
eXample - decb1226835e95f0441ec4ee0ecd9283796a9cfb 

Вы также можете изменить вам колонку DB для utf8_general * вместо utf8_general_ci *, CI означает CaseInsentative. Но вы действительно не хотите, чтобы сделать этот путь
* Asuming использовать utf8


Я не знаю, функции, доступные в Java, но принципы остаются теми же. Я предлагаю вам провести некоторое исследование о том, как хранить пароли с помощью java :)

+1

Для паролей я предлагаю использовать более сильный и «более безопасный» хэш, такой как pbkdf2, bcrypt или scrypt. –

+0

Ah 'pbkdf2', я искал этот вчера, забыл имя. Вы правы, но больше о принципе в моем посте. +1 – Martijn

+0

Спасибо за отличное предложение, я буду копаться в этом. – Malwaregeek

2

Хранение пароля в виде простого текста - плохая идея. По крайней мере используйте хеширование md5.

+0

Нет, sha1 по крайней мере :) md5 следует считать прерывистым для тех, у кого есть разумное количество времени – Martijn

+0

Благодарим вас за отзыв. Я новичок, буду иметь в виду в следующий раз :) – Malwaregeek