我在产品代码中遇到了以下代码片段。它使用按位异或进行字符串比较。这比String.equals(Object o)
方法好吗?作者在这里想要达到什么目的?
private static boolean compareSecure(String a, String b)
{
if ((a == null) || (b == null)) {
return (a == null) && (b == null);
}
int len = a.length();
if (len != b.length()) {
return false;
}
if (len == 0) {
return true;
}
int bits = 0;
for (int i = 0; i < len; i++) {
bits |= a.charAt(i) ^ b.charAt(i);
}
return bits == 0;
}
对于上下文,被等同的字符串是身份验证令牌。