2009-12-28 28 views
5

Si tengo un archivo que quiero para monitorear cualquier cambio (excepto mirar las marcas de fecha de archivos, etc.).¿cómo realizaría un hash SHA1 en un archivo?

¿Cómo podría realizar un hash SHA1 sobre su contenido?

I que esto es lo que hace GIT, así que sólo quiero aprender cómo hacerlo

+3

¿Hay alguna razón por la que no acaba de utilizar un FileSystemWatcher? http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx – Will

+2

Debido a que no funciona, por supuesto. Solo en algunos sistemas de archivos compatibles. –

+0

@Will Incluso en sistemas de archivos compatibles, no se garantiza que se active (tamaño de búfer limitado). – vossad01

Respuesta

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

Calcular la suma de comprobación periódicamente.

+0

Ese es un archivo, preguntó sobre un directorio. – Will

+0

Su pregunta dice "Si tengo un archivo que quiero monitorear para cualquier cambio", leí "Archivo", ¿dónde ves el Directorio? – kd7

+1

Está en el título. La pregunta no está clara. –

0

Para la aplicación específica que usted ha descrito, encontrar el hash SHA-1 de cada archivo en el directorio y luego XORing juntos funcionaría bien.

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

editar para agregar: Como se señaló en los comentarios, esto no va a funcionar realmente. Un scenerio específico estaría agregando dos archivos idénticos, que se cancelarían mutuamente en el XOR. Tal vez la creación de una secuencia con todos los nombres de los archivos y marcas de tiempo y hashes de archivos y luego hashing que le daría lo que necesita.

nuevamente la edición: OK, ahora que ha cambiado su pregunta! ¡Así que no importa!

+0

xor no es recomendable si la seguridad es una preocupación (él no dice que sí, pero tal vez ...). En su lugar, sugeriría ordenar los archivos y hash los hashes. –

+0

@Kevin Montrose - De hecho, voy a editar la respuesta. –

Cuestiones relacionadas