2

我正在创建一个登录表单,我希望密码区分大小写。我写了以下代码。如何使用 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");
}
4

3 回答 3

4

好吧,密码应该(至少!)使用sha1. Sha1为不同的大写返回一个完全不同的值。

如果您有不区分大小写的结果,您可能正在保存纯文本,首先应该更改它!

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

您还可以将 DB 列更改为utf8_general* 而不是utf8_general_ci*,ci 表示 CaseInsentative。但是你真的不想这样做
*假设你使用 utf8


我不知道java中可用的功能,但原理保持不变。我建议您对如何使用 java 存储密码进行一些研究:)

于 2013-08-01T09:14:33.460 回答
2

以纯文本形式存储密码是个坏主意。至少使用 md5 散列。

于 2013-08-01T09:14:34.667 回答
2

除了其他更好的建议之外,您可以尝试的一件事是使用BINARYOPERATOR ,这将迫使 MySQL 检查确切的情况。

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

恕我直言,Martijn 的回答是您应该遵循的。

于 2013-08-01T09:15:42.213 回答