python中的&=
是什么?
例如:
for c1, c2 in izip(string1, string2):
result &= c1 == c2
我在twilio python库中找到它: https://github.com/twilio/twilio-python/blob/master/twilio/util.py#L62
为什么他们不直接比较字符串return string1 == string2
并比较每个字符?
答案 0 :(得分:12)
请参阅secure_compare doctring:
比较两个字符串,同时防范Timing Attacks
通过强制评估每个角色,攻击者无法使用时间来猜测差异发生的位置 - 在第一个差异上立即返回的“正常”实现,这将是可能的。
result &= c1 == c2
的语义计数器(当它们完全相同时成功)实际上是return c1 != c2
(第一个区别的失败/中止),而不是建议的条件问题。
现在,result &= c1 == c2
与result = result & (c1 == c2)
相同,其中&
(也称为bitwsie-AND)是严格逻辑 - 并且超过布尔值。这意味着结果累加器的使用将保持为True 当且仅当结果先前为True并且同情也为True时。