加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这个方法的c# – MethodImpl(NoOptimization),它做什么?是真的n

发布时间:2020-12-15 04:24:04 所属栏目:百科 来源:网络整理
导读:嗯,我想哈希密码,我看看ASP.NET Identity在Microsoft.AspNet.Identity.Crypto类中的作用,我来了这个函数(用于比较2密码哈希): [MethodImpl(MethodImplOptions.NoOptimization)]private static bool ByteArraysEqual(byte[] a,byte[] b){ if (object.Referen
嗯,我想哈希密码,我看看ASP.NET Identity在Microsoft.AspNet.Identity.Crypto类中的作用,我来了这个函数(用于比较2密码哈希):
[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属性是什么好的,为什么它应该在那里(如果我删除会发生什么)?对我来说,它似乎是一个默认的Equals()实现,直到for循环.

我试图看看IL,但对我来说都是废话:/

解决方法

如果一个“智能”编译器将该函数转换为一旦发现不匹配就返回false的东西,那么它可能会使使用此函数的代码容易受到“定时攻击”的攻击.攻击者可以想像出第一个不匹配的位置一个字符串是基于函数需要返回多长时间的.

这不仅仅是科幻小说,实际上,尽管它似乎是这样的.即使使用互联网,您可以采取一大堆样本,并使用一些统计数据来确定如果您猜测实现短路,会发生什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读