为什么要通过计算两个字符的异或来比较两个字符串?

问题描述 投票:4回答:2

不久前,我发现了比较两个字符串并返回bool值的该函数(不幸的是,我不记得它的来源,很可能来自某些Python框架)。了解这里发生的事情非常简单。如果不匹配,则在char之间查找xor将返回1(真)。

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不一样吗?

python string algorithm string-comparison
2个回答
7
投票

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

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

这是hmac.compare_digest的工作方式。


-2
投票

如果字符串的长度相同,则似乎在字符串之间进行了字符相关(XOR和)。在您需要了解“相似性”而不是平等的情况下,可能需要使用它。也许那是计划。作者可能想要进一步扩展此功能。


-2
投票

如果字符串长度相同,似乎在字符串之间进行了字符相关(XOR和)。在您需要了解“相似性”而不是平等的情况下可能需要使用它。也许那是计划。作者可能想要进一步扩展此功能。

© www.soinside.com 2019 - 2024. All rights reserved.