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

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

我想这是一个编码问题,但我不知道如何解决。

最佳答案

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

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

关于java - 使用 matches() 的 Base64 比较返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44880249/

相关文章:

java - Android 图像转 Base64

java - 在 JOptionPane.showOptionDialog 中使用 Arraylist 作为消息

android - 如何在android studio中集成sonarqube?

html - Perl 中的波兰字符 [HTML::TreeBuilder 和 utf8 输入文件]

android - 如何编写在 Kotlin Android 中的间隔内循环的计数器

java - BOOT_COMPLETED 并且已经从 AlarmManager 执行了警报

php - 格式字符串中的 strftime 编码问题

java.lang.OutOfMemory错误: GC overhead limit exceeded after the service gets executed for a week

java - Servlet 以 Base64 格式意外返回响应

java - 如何在由azure应用程序服务门户UI部署的azure java应用程序中配置Web.config文件