¿Cómo hago un archivo SHA1 Checksum en C #?

¿Cómo uso SHA1CryptoServiceProvider() en un archivo para crear una sum de comprobación SHA1 del archivo?

 using (FileStream fs = new FileStream(@"C:\file\location", FileMode.Open)) using (BufferedStream bs = new BufferedStream(fs)) { using (SHA1Managed sha1 = new SHA1Managed()) { byte[] hash = sha1.ComputeHash(bs); StringBuilder formatted = new StringBuilder(2 * hash.Length); foreach (byte b in hash) { formatted.AppendFormat("{0:X2}", b); } } } 

formatted contiene la representación de cadena del hash SHA-1. Además, al utilizar un FileStream lugar de un búfer de bytes, ComputeHash calcula el hash en fragmentos, por lo que no tiene que cargar todo el archivo de una vez, lo que es útil para archivos de gran tamaño.

Con el método ComputeHash. Mira aquí:

ComputeHash

Fragmento de ejemplo:

 using(var cryptoProvider = new SHA1CryptoServiceProvider()) { string hash = BitConverter .ToString(cryptoProvider.ComputeHash(buffer)); //do something with hash } 

Donde buffer es el contenido de tu archivo.

Si ya está leyendo el archivo como una secuencia, la siguiente técnica calcula el hash a medida que lo lee. La única advertencia es que necesitas consumir toda la secuencia.

 class Program { static void Main(string[] args) { String sourceFileName = "C:\\test.txt"; Byte[] shaHash; //Use Sha1Managed if you really want sha1 using (var shaForStream = new SHA256Managed()) using (Stream sourceFileStream = File.Open(sourceFileName, FileMode.Open)) using (Stream sourceStream = new CryptoStream(sourceFileStream, shaForStream, CryptoStreamMode.Read)) { //Do something with the sourceStream //NOTE You need to read all the bytes, otherwise you'll get an exception ({"Hash must be finalized before the hash value is retrieved."}) while(sourceStream.ReadByte() != -1); shaHash = shaForStream.Hash; } Console.WriteLine(Convert.ToBase64String(shaHash)); } } 

También puedes probar:

 FileStream fop = File.OpenRead(@"C:\test.bin"); string chksum = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(fop));