要与外部数据源进行交互,我需要传递一个已经过MD5哈希的滚动安全密钥(我们每天需要生成一个新的MD5哈希密钥)。

我是否每次调用外部Feed时都会进行交易。我需要有一个大约10个字符的字符串作为源。

它适用于ASP.NET(C#/ .NET 3.5)站点,并且几乎每个页面都使用了Feed。我最好每天生成一次哈希,然后将其存储在应用程序缓存中,并记录内存,或者在每次请求时生成哈希?

有帮助吗?

解决方案

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

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

其他提示

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

如果在给定的一天缓存中它是相同的,那么这可能是一个想法。您甚至可以将缓存设置为24小时,并在缓存过期时编写代码以重新生成哈希

计算算法的时间复杂度!

请查看以下代码:

   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使用相比,内存更便宜。

使用Asp.Net缓存非常简单,所以我不明白为什么你不应该缓存密钥。

将密钥存储在缓存中甚至可以节省一些内存,因为您可以重复使用它而不是为每个请求创建一个新内存。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top