【发布时间】:2016-03-17 15:33:08
【问题描述】:
在 Spring Security 的 BCrypt 实现中,我遇到了以下方法(source):
static boolean equalsNoEarlyReturn(String a, String b) {
char[] caa = a.toCharArray();
char[] cab = b.toCharArray();
if (caa.length != cab.length) {
return false;
}
byte ret = 0;
for (int i = 0; i < caa.length; i++) {
ret |= caa[i] ^ cab[i];
}
return ret == 0;
}
为什么使用这种 no-early-return equals 方法?它有什么好处:
static boolean equals(String a, String b) {
char[] caa = a.toCharArray();
char[] cab = b.toCharArray();
if (caa.length != cab.length) {
return false;
}
for (int i = 0; i < caa.length; i++) {
if (caa[i] != cab[i]) {
return false;
}
}
return true;
}
甚至:
return a.equals(b)
?
是出于安全的考虑吗?
【问题讨论】:
标签: java spring spring-security equals bcrypt