Comment utiliser la SHA1CryptoServiceProvider()
sur un fichier pour créer une somme de contrôle SHA1 du fichier?
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
contient la représentation sous forme de chaîne du hachage SHA-1. De plus, en utilisant un FileStream
au lieu d'un tampon d'octets, ComputeHash
calcule le hachage en morceaux, vous n'avez donc pas à charger le fichier entier en une seule fois, ce qui est utile pour les gros fichiers .
Avec la méthode ComputeHash. Vois ici:
Exemple d'extrait:
using(var cryptoProvider = new SHA1CryptoServiceProvider())
{
string hash = BitConverter
.ToString(cryptoProvider.ComputeHash(buffer));
//do something with hash
}
Où tampon correspond au contenu de votre fichier.
Si vous lisez déjà le fichier sous forme de flux, la technique suivante calcule le hachage lorsque vous le lisez. La seule mise en garde est que vous devez consommer tout le flux.
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));
}
}
Vous pouvez également essayer:
FileStream fop = File.OpenRead(@"C:\test.bin");
string chksum = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(fop));