2011-10-17 115 views
-1

我有一個方法,我編碼輸入字符串,然後我檢查值與我的數據庫值(存儲在編碼形式),如何檢查字符串是否是編碼形式

public void checkString(String strPass){ 
String s = MD5.crypt(strPass); 

code to check the string s with the data base value.. 

} 

我需要它傳遞給了編碼string.Data爲strPass可以是 1.管理員 2. L4989C形式方法之前檢查「strPass」的值的方式

請幫我解決..

+0

您的第二個表單以「L」開頭。這是一個有效的md5字符? – cherouvim

+0

hi cherouvim,基本上第二種形式是隨機生成的字符串,它將在密碼重置事件時存儲在數據庫中。 – Anshul

+0

爲什麼選擇投票,請讓我知道它,所以我可以改善這部分的帖子... – Anshul

回答

1

你會有到:

  1. 散列您想用MD5散列的字符串。
  2. 用十六進制表示散列字符串
  3. str1.equals(str2)來查看2個散列值是否相等。
0

下面是你問的問題的答案。

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()方法可能有問題。如果該方法執行以下操作:

  1. 使用String.getBytes(...)將字符串轉換爲byte[]
  2. 計算字節的MD5校驗和,給你另一個byte[]
  3. 使用new String(byte[], ...)將加密字節轉換爲字符串。

問題是,最後一步很可能是有損...並且不正確。大多數字符編碼具有不映射到有效字符的字節或字節序列。如果String構造函數在輸入字節數組中遇到其中的一個,那麼它將丟棄它或將其映射到表示不可映射字符的某個字符(例如'?')。最終結果是校驗和存儲不正確。爲了解決這個問題,你必須將數據庫中校驗和的形式存儲爲blob,或者將其編碼爲十六進制或base64或其他。


這將有助於理解您的問題,如果您提供了MD5.crypt方法的源代碼...或告訴我們它來自哪個庫。

相關問題