2017-07-03 11 views
1

アンドロイドクライアントプログラムからハッシュされた文字列をJavaサーバーに送信する必要があります。matches()を使った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

感謝を!正規表現を完全に忘れてしまった。 –