下面是你問的問題的答案。
public void checkString(String strPass) {
if (strPass.equals("admin") || strPass.equals("L4989C")) {
// do something else
} else {
String s = MD5.crypt(strPass);
// code to check the string s with the data base value.
}
但是,我認爲您的MD5.crypt()
方法可能有問題。如果該方法執行以下操作:
- 使用
String.getBytes(...)
將字符串轉換爲byte[]
。
- 計算字節的MD5校驗和,給你另一個
byte[]
。
- 使用
new String(byte[], ...)
將加密字節轉換爲字符串。
問題是,最後一步很可能是有損...並且不正確。大多數字符編碼具有不映射到有效字符的字節或字節序列。如果String
構造函數在輸入字節數組中遇到其中的一個,那麼它將丟棄它或將其映射到表示不可映射字符的某個字符(例如'?')。最終結果是校驗和存儲不正確。爲了解決這個問題,你必須將數據庫中校驗和的形式存儲爲blob,或者將其編碼爲十六進制或base64或其他。
這將有助於理解您的問題,如果您提供了MD5.crypt方法的源代碼...或告訴我們它來自哪個庫。
您的第二個表單以「L」開頭。這是一個有效的md5字符? – cherouvim
hi cherouvim,基本上第二種形式是隨機生成的字符串,它將在密碼重置事件時存儲在數據庫中。 – Anshul
爲什麼選擇投票,請讓我知道它,所以我可以改善這部分的帖子... – Anshul