2017-07-03 123 views
1

我必須從Android客戶端程序發送哈希字符串到Java服務器。使用matches()返回false的base64比較返回false

客戶端:

byte[] encodedID = MessageDigest.getInstance("SHA-256").digest(id.getBytes("UTF-8")); 
String encodedID64 = Base64.encodeToString(encodedID,Base64.NO_WRAP); 

服務器:

byte[] hashbytes = logInfo.getString(LoginHash).getBytes(); 
String logHash = new String(hashbytes,"UTF-8"); 

的字符串存儲在服務器上。當應用程序關閉時,網絡任務的後臺服務將重新啓動。它從共享首選項讀取Base64編碼的散列,並將其發送到服務器以再次登錄。但是,調用matches()來比較存儲的字符串和接收到的值會返回false。

這是接收什麼,存儲的值是這樣的:

Stored:"WuYnLw/vKlrrzEWaetqcbqPMcu+cQ0hvnV0Yf5kiIdE=" 
Given :"WuYnLw/vKlrrzEWaetqcbqPMcu+cQ0hvnV0Yf5kiIdE=" 

我想這是一個編碼的問題,但我無法弄清楚如何解決它。

回答

4

您應該使用equals()因爲matches()對待+爲一個特殊字符:

System.out.println("a+b".matches("a+b")); // false 
System.out.println("a+b".equals("a+b")); // true 
+0

謝謝!完全忘了正則表達式。 –