まあ、私はパスワードをハッシュしたかった、と私はASP.netアイデンティティが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のときにループが最適化されなかった理由は不思議でした。素晴らしい答え! –