首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在.NET中生成MD5的成本有多高?

在.NET中生成MD5的成本有多高?
EN

Stack Overflow用户
提问于 2009-01-07 05:49:30
回答 5查看 7K关注 0票数 7

为了与外部数据馈送交互,我需要传递一个经过MD5散列的滚动安全密钥(每天我们都需要生成一个新的MD5散列密钥)。

每次调用外部提要时,我都在权衡是否要这样做。我需要有一个大约10个字符的字符串作为提要。

它适用于ASP.NET (C#/ .NET 3.5)站点,几乎每个页面都使用该提要。我最好的做法是每天生成一次散列,然后将其存储在应用程序缓存中,并获得内存命中,还是在每次请求时生成它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-07 06:28:44

优化的唯一可接受的基础是数据。测量生成这个内联,并测量缓存它。

我的高端工作站可以在一秒钟内计算出超过100k的10字节数据段的MD5哈希值。缓存对我来说没有任何好处,我打赌对你也是一样。

票数 14
EN

Stack Overflow用户

发布于 2009-01-07 06:22:27

生成一些样本数据。嗯,有很多。计算样本数据的MD5。测量它所需的时间。你自己决定吧。

票数 3
EN

Stack Overflow用户

发布于 2009-01-07 06:46:29

计算算法的时间复杂度!

请看下面的代码:

代码语言:javascript
复制
   public string GetMD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        bs = x.ComputeHash(bs);
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        string password = s.ToString();
        return password;
    }

如果我们要计算时间复杂度,我们会得到T= 11 +n*2,但这只是“我们看到的”,即ToLower可能会做一些我们不知道的繁重工作。但从这一点我们可以看出,该算法在所有情况下都是O(n)。这意味着时间随着数据的增长而增长。

此外,为了解决缓存问题,我更愿意将“繁重”的工作放在内存中,因为与CPU使用量相比,内存的成本更低。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/419327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档