как мне выполнить хэш SHA1 для файла?

Если у меня есть файл, который я хочу отслеживать на предмет каких-либо изменений (кроме просмотра отметок даты файла и т. д.).

Как я могу выполнить хэш SHA1 для его содержимого?

Я думаю, что делает GIT, поэтому я просто хочу узнать, как это сделать


person mrblah    schedule 28.12.2009    source источник


Ответы (2)


using (FileStream stream = File.OpenRead(@"C:\File.ext"))
{
    using (SHA1Managed sha = new SHA1Managed())
    {
        byte[] checksum = sha.ComputeHash(stream);
        string sendCheckSum = BitConverter.ToString(checksum)
            .Replace("-", string.Empty);
    }
}

Периодически вычисляйте контрольную сумму.

person Ta01    schedule 28.12.2009
comment
Это файл, он спросил о каталоге. - person ; 28.12.2009
comment
Его вопрос гласит: «Если у меня есть файл, который я хочу отслеживать на наличие изменений, я читаю «Файл», где вы видите «Каталог»? - person Ta01; 28.12.2009

Для конкретного приложения, которое вы описали, поиск хэша SHA-1 каждого файла в каталоге, а затем их XOR вместе будет работать хорошо.

byte[] checksum = new byte[sha1Length];
for each file
   for (int index = 0; index < sha1Length; index++)
       checksum[index] ^= fileChecksum[index]

Отредактировано для добавления: как указано в комментариях, на самом деле это не сработает. Одним из конкретных сценариев было бы добавление двух идентичных файлов, которые отменяли бы друг друга в XOR. Возможно, создать поток со всеми именами файлов, временными метками и хэшами файлов, а затем хэшировать, что даст вам то, что вам нужно.

Снова отредактировано: хорошо, теперь вы изменили свой вопрос! Так что неважно!

person Jeffrey L Whitledge    schedule 28.12.2009
comment
xor на самом деле не рекомендуется, если безопасность вызывает беспокойство (он не говорит, что это так, но, может быть...). Вместо этого я бы предложил отсортировать файлы и хешировать хэши. - person Kevin Montrose; 28.12.2009