Как хэшировать один файл несколькими способами одновременно?

Я пытаюсь разработать простое приложение, которое будет использоваться для вычисления CRC32/md5/sha1/sha256/sha384/sha512 файла, и я столкнулся с небольшим препятствием.. Это делается в C #.

Я хотел бы сделать это как можно эффективнее, поэтому моей первоначальной мыслью было сначала прочитать файл в поток памяти перед обработкой, но вскоре я обнаружил, что очень большие файлы приводят к тому, что мне очень не хватает памяти. быстро. Так что может показаться, что вместо этого я должен использовать файловый поток. Проблема, как мне кажется, заключается в том, что одновременно может выполняться только одна хэш-функция, и выполнение этого с файловым потоком займет некоторое время для завершения каждого хэша.

Как я могу прочитать небольшой фрагмент файла в память, обработать его всеми 6 алгоритмами, а затем перейти к другому фрагменту... Или хэширование не работает таким образом?

Это была моя первоначальная попытка чтения файла в память. Это не удалось, когда я попытался прочитать образ компакт-диска в память до запуска алгоритмов хеширования в потоке памяти:

    private void ReadToEndOfFile(string filename)
    {
        if (File.Exists(filename))
        {
            FileInfo fi = new FileInfo(filename);
            FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[16 * 1024];

            //double step = Math.Floor((double)fi.Length / (double)100);

            this.toolStripStatusLabel1.Text = "Reading File...";
            this.toolStripProgressBar1.Maximum = (int)(fs.Length / buffer.Length);
            this.toolStripProgressBar1.Value = 0;

            using (MemoryStream ms = new MemoryStream())
            {
                int read;
                while ((read = fs.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                    this.toolStripProgressBar1.Value += 1;
                }

                _ms = ms;
            }
        }
    }
5
задан agent154 26 April 2012 в 15:26
поделиться