簡體   English   中英

區分大小寫查詢

[英]Case Sensitive where query

我正在創建一個登錄表單,我希望密碼具有案例敏感性。 我寫了以下代碼。 如何使用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");
}

好吧,密碼應該使用像sha1這樣的函數進行哈希處理(至少!)。 Sha1為不同的大寫返回一個完整的其他值。

如果你有不區分大小寫的結果,你可能正在保存它的純文本,應該改變它!

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

您也可以將DB列更改為utf8_general *而不是utf8_general_ci *,ci表示CaseInsentative。 但你真的不想這樣做
* 假設你使用utf8


我不知道java中可用的函數,但原則保持不變。 我建議你做一些關於如何使用java存儲密碼的研究:)

以純文本格式存儲密碼是個壞主意。 至少使用md5哈希。

除了另一個更好的建議 ,你可以嘗試的一件事是使用BINARY OPERATOR ,它將強制MySQL檢查確切的情況。

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

恕我直言, Martijn的回答是你應該遵循的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM