2009-12-28 9 views
5

Se si dispone di un file che si desidera monitorare per eventuali modifiche (oltre a guardare i timbri di data del file, ecc.).come eseguirò un hash SHA1 su un file?

Come è possibile eseguire un hash SHA1 sui suoi contenuti?

ho che questo è ciò che fa GIT, quindi voglio solo imparare come farlo

+3

C'è una ragione per cui non si dovrebbe usare semplicemente FileSystemWatcher? http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx – Will

+2

Perché non funziona, ovviamente. Solo su alcuni file system supportati. –

+0

@Will Anche nei file system supportati, non è garantito l'attivazione (dimensione buffer limitata). – vossad01

risposta

18
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); 
    } 
} 

calcolare periodicamente il checksum.

+0

Questo è un file, ha chiesto una directory. – Will

+0

La sua domanda dice "Se ho un file che voglio monitorare per eventuali modifiche", ho letto "File", dove vedi Directory? – kd7

+1

È nel titolo. La domanda non è chiara. –

0

Per l'applicazione specifica che hai descritto, trovare l'hash SHA-1 di ciascun file nella directory e quindi eseguirli insieme XOR funzionerebbe correttamente.

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

A cura di aggiungere: Come sottolineato nei commenti, questo non funziona davvero. Uno specifico scenerio aggiungerebbe due file identici, che si annullerebbero a vicenda nello XOR. Forse creando uno stream con tutti i nomi di file e data/ora e hash di file e quindi hashing che ti darebbe quello che ti serve.

Modificato di nuovo: OK, ora hai cambiato la tua domanda! Quindi non importa!

+0

xor non è davvero consigliabile se la sicurezza è un problema (non lo dice, ma forse ...). Invece suggerirei di ordinare i file e di eseguire l'hash degli hash. –

+0

@Kevin Montrose - In effetti, modificherò la risposta. –