글쎄, 내가 암호를 해시 원했고, 내가 ASP.net ID가 Microsoft.AspNet.Identity.Crypto
클래스에서하는 방법에 대해 살펴 있었고, 난 (2 암호 해시 비교하는 데 사용되는)이 기능을 함께했다 :이 메소드의 MethodImpl (NoOptimization)은 무엇을합니까? 그리고 그것은 정말로 nessecary입니까?
[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 때까지 기본 Equals() 구현처럼 보인다. 가 나는 IL 좀보고 시도했지만 나에게 모든 넌센스입니다 : "스마트"컴파일러는 즉시 불일치가 발견되면서 그 수 false
를 반환 뭔가에 해당 기능을 설정 한 경우/
감사합니다. 종종 성능상의 이유로 조기 루프 종료를 사용합니다. 그러나 공격 가능하다고 생각한 적이 없습니다. 건배! – Nefarion
이 매우 흥미로운 대답에 감사드립니다. 값이 false 일 때 루프가 최적화되지 않은 이유가 궁금합니다. 좋은 대답! –