我正在 Android 中编写一个身份验证服务,这个服务包括一个用 java 编写的服务器部分。我在 Android 和 Server 中执行这两条代码的两个部分都执行相同的操作:
安卓:
String genChallengeResponse(String challenge, String message) {
String Hmac_ALG = "HmacSHA256";
SecretKey key = new SecretKeySpec(challenge.getBytes(), Hmac_ALG);
Mac m = Mac.getInstance(Hmac_ALG);
m.init(key);
m.update(password.getBytes());
byte[] mac = m.doFinal();
return new String(Base64.encode(mac, Base64.DEFAULT));
}
服务器:
String genChallengeResponse(String challenge, String message) {
String Hmac_ALG = "HmacSHA256";
SecretKey key = new SecretKeySpec(challenge.getBytes(), Hmac_ALG);
Mac m = Mac.getInstance(Hmac_ALG);
m.init(key);
m.update(password.getBytes());
byte[] mac = m.doFinal();
return new String(Base64.encodeBase64(mac));
}
从相同的挑战和消息开始,结果如下:
安卓:n2EaLpQr0uKgkZKhCQzwuIFeeLjzZKerZcETVNcfla4= 服务器:n2EaLpQr0uKgkZKhCQzwuD9eeLjzZKerZcETVNcfla4= ^^
这些仅针对两个字符而有所不同。问题是这种奇怪的行为并没有出现在传递给函数的每一对字符串中......
我尝试在每个系统中使用 UTF-8,但没有任何变化……有人知道问题出在哪里吗?如果这是一个已知问题...
(重要的是,使用 Android 2.2 或 4.0 时问题是一样的,那么问题不在于操作系统,我认为)。