0

我可以缓存来自 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 类,假设我需要的所有位都可用。

4

0 回答 0