2014-09-26 2 views
7

파이썬에서 &=은 무엇입니까? 예를 들어"& ="연산자 란 무엇이며 Twilio가 문자열을 비교할 때 왜 사용합니까?

는 :

for c1, c2 in izip(string1, string2): 
    result &= c1 == c2 

나는 twilio 파이썬 라이브러리에 그것을 발견 : https://github.com/twilio/twilio-python/blob/master/twilio/util.py#L62

왜 그들은 단지 직접 return string1 == string2을 문자열을 비교하고 각 문자를 비교하지 않는다? 공격자가이 곳을 추측하는 데 걸린 시간을 사용할 수없는 모든 문자의 평가를 강제 하여 Timing Attacks

에 대해 보호하면서

는 두 문자열을 비교 :

답변

12

secure_compare doctring를 참조하십시오 차이가 발생했습니다 - 첫 번째 차이점에서 즉시 반환되는 "정상적인"구현을 사용하면이 작업이 가능합니다.

의미 카운터가 result &= c1 == c2 (모두 동일 할 때 성공)은 실제로 return c1 != c2 (첫 번째 차이는 실패/중단)이며 제안 된 조건은 아닙니다.

이제 result &= c1 == c2&가 (또한 bitwsie-AND라고도 함) result = result & (c1 == c2),와 동일한 엄격한 논리적 AND를 통해 부울 연산이다. 결과가 누적 된 결과는 누적 값 인 채 인 경우에만 이전 결과가 참이고 연민도 참인 경우에만 사용됩니다.

+0

정직하게도 어셈블리에 관심이있을 것입니다. 루프 용으로 세미 원자 함수로 줄일 수있는 것처럼 설정되어 있습니다. 동작을 스레드로부터 안전하게 유지하는 데 도움이됩니다. –

+0

그것은 어떤 점에서 여전히 컴파일로 만듭니다. 그래서 생각할 가치가 여전히 있습니다. –

+0

@JeffLangemeier : 문자열이 변경되지 않기 때문에 처음에는 스레드 안전 문제가 없습니다. – Blckknght

관련 문제