python - 这个 `_time_independent_equals` 是什么意思?

标签 python tornado

tornado .web 模块有一个名为 _time_independent_equals 的函数:

def _time_independent_equals(a, b):
    if len(a) != len(b):
        return False
    result = 0
    for x, y in zip(a, b):
        result |= ord(x) ^ ord(y)
    return result == 0

它用于比较安全的 cookie 签名,因此也是名称。

但是关于这个函数的实现,难道只是复杂的说a==b吗?

最佳答案

该函数不只是简单地比较字符串,它会尝试始终花费相同的时间来执行。

这对于比较密码等安全任务很有用。如果函数在第一个不匹配的字节上返回,攻击者可以尝试所有可能的第一个字节并知道花费时间最长的字节是匹配的。然后他们可以尝试所有可能的第二个字节并知道花费时间最长的那个是匹配的。这可以重复直到推导出整个字符串。 (实际上你必须做很多平均来克服网络中的随机延迟,但如果你有耐心,它是有效的。)

关于python - 这个 `_time_independent_equals` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3027286/

相关文章:

python - sklearn异常错误: fitfailed warning from GridSearchCV in tensorflow

python - 从 python 中的三引号字符串中删除\n

python - Tornado 的几个静态目录

python-2.7 - Tornado websocket ping/pong 的实现

python - <package name> 和 python-<package name> 有什么区别?

python - Tornado 代码部署

python - Pandas keep_default_na=False 不起作用

Python 3.3 - 格式化表中的信息

python - 使用 Python OpenCV 读取 JPG 彩色图像并将图像保存为原始或二进制文件

javascript - 重新连接到同一个 Websocket