使用matches()返回false的base64比较返回false

问题描述:

我必须从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=" 

我想这是一个编码的问题,但我无法弄清楚如何解决它。

您应该使用equals()因为matches()对待+为一个特殊字符:

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

谢谢!完全忘了正则表达式。 –