How do I do a SHA1 File Checksum in C#?

前端 未结 4 1219
鱼传尺愫
鱼传尺愫 2020-11-27 12:45

How do I use the SHA1CryptoServiceProvider() on a file to create a SHA1 Checksum of the file?

相关标签:
4条回答
  • 2020-11-27 12:57

    Also you can try:

    FileStream fop = File.OpenRead(@"C:\test.bin");
    string chksum = BitConverter.ToString(System.Security.Cryptography.SHA1.Create().ComputeHash(fop));
    
    0 讨论(0)
  • 2020-11-27 13:07
    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 contains the string representation of the SHA-1 hash. Also, by using a FileStream instead of a byte buffer, ComputeHash computes the hash in chunks, so you don't have to load the entire file in one go, which is helpful for large files.

    0 讨论(0)
  • 2020-11-27 13:13

    If you are already reading the file as a stream, then the following technique calculates the hash as you read it. The only caveat is that you need to consume the whole stream.

    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));
            }
        }
    
    0 讨论(0)
  • 2020-11-27 13:14

    With the ComputeHash method. See here:

    ComputeHash

    Example snippet:

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

    Where buffer is the contents of your file.

    0 讨论(0)
提交回复
热议问题