protected static function compareString($known, $input)
{
// 强制转换为字符串类型
$known = (string) $known;
$input = (string) $input;
if (function_exists('hash_equals')) {
return hash_equals($known, $input);
}
// 字符串长度不相等可直接返回
$length = strlen($known);
if (strlen($input) !== $length) {
return false;
}
// 逐位比较字符串
// 遇到字符不一致, 并不是直接返回, 这样就无法猜解字符串在哪里出错
$result = 0;
for ($i = 0; $i < $length; $i++) {
$result |= ord($known[$i]) ^ ord($input[$i]);
}
return 0 === $result;
}