我正在创建一个登录表单,我希望密码具有案例敏感性。我写了以下代码。如何使用where子句使其区分大小写。
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");
}
答案 0 :(得分:4)
嗯,密码应该用sha1
之类的函数进行哈希处理(至少!)。 Sha1
为不同的大写字母返回一个完整的其他值。
如果你有不区分大小写的结果,你可能会保存纯文本,应该先修改它!
String - sha1 value
example - c3499c2729730a7f807efb8676a92dcb6f8a3f8f
Example - 0f01ed56a1e32a05e5ef96e4d779f34784af9a96
eXample - decb1226835e95f0441ec4ee0ecd9283796a9cfb
您也可以将数据库列更改为utf8_general
*而不是utf8_general_ci
*,ci表示CaseInsentative。但你真的不想这样做
* 假设您使用utf8
我不知道java中可用的函数,但原则保持不变。我建议你做一些关于如何使用java存储密码的研究:)
答案 1 :(得分:2)
以纯文本格式存储密码是个坏主意。至少使用md5哈希。
答案 2 :(得分:2)
除了其他更好的建议之外,您可以尝试使用BINARY
OPERATOR,这将迫使MySQL检查确切的案例。
select * from user where userid=? and BINARY password=?
恕我直言,Martijn's answer是你应该遵循的。