什么是“& =”运算符,为什么Twilio在比较字符串时会使用它?

时间:2014-09-26 19:20:59

标签: python operators twilio

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并比较每个字符?

1 个答案:

答案 0 :(得分:12)

请参阅secure_compare doctring:

  

比较两个字符串,同时防范Timing Attacks

通过强制评估每个角色,攻击者无法使用时间来猜测差异发生的位置 - 在第一个差异上立即返回的“正常”实现,这将是可能的。

result &= c1 == c2的语义计数器(当它们完全相同时成功)实际上是return c1 != c2(第一个区别的失败/中止),而不是建议的条件问题。

现在,result &= c1 == c2result = result & (c1 == c2)相同,其中&(也称为bitwsie-AND)是严格逻辑 - 并且超过布尔值。这意味着结果累加器的使用将保持为True 当且仅当结果先前为True并且同情也为True时。