首页 > 解决方案 > 为什么要通过计算字符的异或来比较两个字符串?

问题描述

前段时间我发现了一个比较两个字符串并返回布尔值的函数(不幸的是,我不记得它来自哪里,很可能来自某个 Python 框架)。很容易理解这里发生了什么。如果它们不匹配,则在 char 之间查找 xor 返回 1 (True)。

def  cmp_strings(str1, str2):
    return len(str1) == len(str2) and sum(ord(x)^ord(y) for x, y in zip(str1, str2)) == 0

但是为什么要使用这个功能呢?不是一样str1==str2吗?

标签: pythonstringalgorithmstring-comparison

解决方案


比较任何长度相同的字符串需要相似的时间。当字符串敏感时,它用于安全性。通常它用于比较密码哈希。

如果==使用,Python 会在找到第一个不匹配的字符时停止比较字符。这对散列不利,因为它可以揭示散列与匹配的接近程度。这将有助于攻击者暴力破解密码。

这是如何hmac.compare_digest工作的。


推荐阅读