python - 为什么要通过计算字符的异或来比较两个字符串?
问题描述
前段时间我发现了一个比较两个字符串并返回布尔值的函数(不幸的是,我不记得它来自哪里,很可能来自某个 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
吗?
解决方案
比较任何长度相同的字符串需要相似的时间。当字符串敏感时,它用于安全性。通常它用于比较密码哈希。
如果==
使用,Python 会在找到第一个不匹配的字符时停止比较字符。这对散列不利,因为它可以揭示散列与匹配的接近程度。这将有助于攻击者暴力破解密码。
这是如何hmac.compare_digest
工作的。
推荐阅读
- mongodb - 猫鼬保存方法不会忘记最后一个模式
- amazon-web-services - 在 AWS Spot 实例上运行 k8s statefulset
- javascript - 当打印页面出现在javascript中时,如何删除“日期”和“无标题”字母?
- mysql - MySQL 5.6.41 errno 1064:使用变量创建 MySQL 查询
- java - Maven Arquillian Junit 测试失败
- python - Keras 卷积自动编码器空白输出
- arrays - 使用perl将json数组转换为csv时出错
- ios - 目标 c - 在 iPhone X/XR/XS Max 上使用 UIActivityViewController 在 Mail/iMessage 中缺少 To 字段
- azure - Azure 静态网站上的多部分字节范围
- python - 如何迭代 Python 列表并删除相似的元素?