C#MD5CryptoServiceProvider缓存TransformBlock

时间:2012-11-02 11:55:21

标签: c# caching md5

我可以从TransformBlock缓存结果,然后可以将它们重新用于进一步散列,而无需每次都重新计算相同的散列。鉴于以下小样本。

    static void Main(string[] args)
    {
        for (int i = 0; i < 100000; ++i)
        {
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] exe = File.ReadAllBytes(@"..\..\..\md5cache\bin\Debug\md5cache.exe");
            byte[] wrk = Encoding.UTF8.GetBytes(Path.GetFullPath(@"..\..\..\md5cache\bin\Debug"));
            byte[] cmd = Encoding.UTF8.GetBytes(@"test" + i.ToString() + ".bin");
            md5.TransformBlock(exe, 0, exe.Length, null, 0);
            md5.TransformBlock(wrk, 0, wrk.Length, null, 0);
            md5.TransformFinalBlock(cmd, 0, cmd.Length);
            byte[] hash = md5.Hash;
            string hexHash = BitConverter.ToString(hash);
            Console.WriteLine(hexHash.Replace("-", ""));
        }
    }

exe和wrk的数据在应用程序的整个生命周期内都不会发生变化,但我无法找到缓存这一点,以避免每次通过时不必要地重新计算数据。

我已经看过属性CanReuseTransform,但我不确定它是如何使用的,因为它似乎只是一个吸气剂,我想它是用来看看你是否可以堆叠TransformBlock/TransformFinalBlock.

所以有人知道这是否可行?我想我可以创建一个新的可克隆MD5CryptoServiceProvider类,假设我需要的所有位都可用。

0 个答案:

没有答案