generar - ¿Cómo hago una suma de comprobación de archivo SHA1 en C#?
sha1 c# ejemplo (4)
Con el método ComputeHash. Mira aquí:
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 su archivo.
¿Cómo uso el SHA1CryptoServiceProvider()
en un archivo para crear una suma de comprobación SHA1 del archivo?
Si ya está leyendo el archivo como un flujo, la siguiente técnica calcula el hash a medida que lo lee. La única advertencia es que necesitas consumir todo el flujo.
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));
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 trozos, por lo que no tiene que cargar todo el archivo de una sola vez, lo que es útil para archivos grandes.