ठीक है, मैं एक पासवर्ड हैश करने के लिए चाहते थे, और मैं कैसे ASP.net पहचान Microsoft.AspNet.Identity.Crypto
क्लास में करता है पर एक नज़र था, और मैं इस समारोह साथ आया था (जो 2 पासवर्ड हैश तुलना करने के लिए प्रयोग किया जाता है):MethodImpl (NoOptimization), यह क्या करता है? और क्या यह वास्तव में निराशाजनक है?
[MethodImpl(MethodImplOptions.NoOptimization)]
private static bool ByteArraysEqual(byte[] a, byte[] b)
{
if (object.ReferenceEquals(a, b))
{
return true;
}
if (((a == null) || (b == null)) || (a.Length != b.Length))
{
return false;
}
bool flag = true;
for (int i = 0; i < a.Length; i++)
{
flag &= a[i] == b[i];
}
return flag;
}
यह वह जगह है परावर्तक उत्पादन से एक सीधा कॉपी ...
अब मेरे सवाल है, है क्या NoOptimization के लिए अच्छा गुण है, और वह वहाँ क्यों होना चाहिए (क्या होगा अगर मैं इसे हटाने के)? मेरे लिए, यह for
-loop तक डिफ़ॉल्ट बराबर() कार्यान्वयन की तरह दिखता है।
मैं आईएल पर एक नजर है की कोशिश की लेकिन यह मेरे लिए सब बकवास है: एक "स्मार्ट" संकलक कुछ है कि false
रिटर्न जैसे ही एक बेमेल पाया गया था, यह हो सकता है कि में समारोह चालू किया है तो/
इसके लिए धन्यवाद, मैं अक्सर प्रदर्शन कारणों के लिए समयपूर्व लूप समाप्ति का उपयोग करता हूं, लेकिन मैंने कभी भी हमले के बारे में सोचा नहीं! चीयर्स! – Nefarion
इस बहुत ही रोचक जवाब के लिए धन्यवाद। यह सोच रहा था कि मूल्य गलत होने पर रोकने के लिए लूप को अनुकूलित क्यों नहीं किया गया था। बहुत बढ़िया जवाब! –