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

时间:2017-07-03 07:46:02

标签: java android encoding base64

我必须从android客户端程序向java服务器发送散列字符串。

客户方:

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="

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

1 个答案:

答案 0 :(得分:4)

您应该使用equals(),因为matches()+视为特殊字符:

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