2014-09-26 13 views
7

पाइथन में &= क्या है?"& =" ऑपरेटर क्या है और स्ट्रिंग की तुलना करते समय ट्विलियो इसका उपयोग क्यों करता है?

उदाहरण के लिए:

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 == c2result = result & (c1 == c2), जहां & (यह भी एक bitwsie-और के रूप में जाना जाता है) के रूप में ही है एक सख्त तार्किक-और अधिक Booleans है। इसका मतलब है कि परिणाम संचयक का उपयोग सही रहेगा यदि केवल परिणाम पहले सत्य था और करुणा भी सच है।

+0

मैं ईमानदारी से उस असेंबली में दिलचस्पी लेता हूं जो उत्पादित होता है, जिस तरह से यह स्थापित होता है, ऐसा लगता है कि यह प्रति लूप के लिए अर्ध-परमाणु कार्यों में कमी कर सकता है। जो कार्रवाई थ्रेड-सुरक्षित सुरक्षित रखने में और मदद करेगा। –

+0

यह अभी भी इसे किसी बिंदु पर संकलित करने में बनाता है। तो यह अभी भी सोचने का एक व्यवहार्य कारण है। –

+0

@ जेफ लांगेमेर: चूंकि तार अपरिवर्तनीय हैं, इसलिए पहले स्थान पर कोई थ्रेड सुरक्षा समस्या नहीं है। – Blckknght

संबंधित मुद्दे

 संबंधित मुद्दे