How do I create an MD5 hash digest from a text file?

后端 未结 4 1077
终归单人心
终归单人心 2020-12-05 18:12

Using C#, I want to create an MD5 hash of a text file. How can I accomplish this?

Update: Thanks to everyone for their help. I\'ve finally settled u

相关标签:
4条回答
  • 2020-12-05 18:42

    Short and to the point. filename is your text file's name:

    using (var md5 = MD5.Create())
    {
        return BitConverter.ToString(md5.ComputeHash(File.ReadAllBytes(filename))).Replace("-", "");
    }
    
    0 讨论(0)
  • 2020-12-05 18:59

    Here is a .NET Standard version that doesn't require reading the entire file into memory:

        private byte[] CalculateMD5OfFile(FileInfo targetFile)
        {
            byte[] hashBytes = null;
            using (var hashcalc = System.Security.Cryptography.MD5.Create())
            {
                using (FileStream inf = targetFile.OpenRead())
                    hashcalc.ComputeHash(inf);
                hashBytes = hashcalc.Hash;
            }
            return hashBytes;
        }
    

    You can convert the byte[] array into a string using the methods shown above. Also: You can change "MD5" in the third line to SHA1, SHA256, etc. to calculate other hashes.

    0 讨论(0)
  • 2020-12-05 19:03
    internal static string GetHashCode(string filePath, HashAlgorithm cryptoService)
    {
    // create or use the instance of the crypto service provider
    // this can be either MD5, SHA1, SHA256, SHA384 or SHA512
    using (cryptoService)
    {
        using (var fileStream = new FileStream(filePath, 
                                               FileMode.Open, 
                                               FileAccess.Read, 
                                               FileShare.ReadWrite))
        {
            var hash = cryptoService.ComputeHash(fileStream);
            var hashString = Convert.ToBase64String(hash);
            return hashString.TrimEnd('=');
         }
      }
    }
    
    
      WriteLine("MD5 Hash Code   : {0}", GetHashCode(FilePath, new MD5CryptoServiceProvider()));
      WriteLine("SHA1 Hash Code  : {0}", GetHashCode(FilePath, new SHA1CryptoServiceProvider()));
      WriteLine("SHA256 Hash Code: {0}", GetHashCode(FilePath, new SHA256CryptoServiceProvider()));
      WriteLine("SHA384 Hash Code: {0}", GetHashCode(FilePath, new SHA384CryptoServiceProvider()));
      WriteLine("SHA512 Hash Code: {0}", GetHashCode(FilePath, new SHA512CryptoServiceProvider()));
    
    0 讨论(0)
  • 2020-12-05 19:07

    Here's the routine I'm currently using.

        using System.Security.Cryptography;
    
        public string HashFile(string filePath)
        {
            using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                return HashFile(fs);
            }
        }
    
        public string HashFile( FileStream stream )
        {
            StringBuilder sb = new StringBuilder();
    
            if( stream != null )
            {
                stream.Seek( 0, SeekOrigin.Begin );
    
                MD5 md5 = MD5CryptoServiceProvider.Create();
                byte[] hash = md5.ComputeHash( stream );
                foreach( byte b in hash )
                    sb.Append( b.ToString( "x2" ) );
    
                stream.Seek( 0, SeekOrigin.Begin );
            }
    
            return sb.ToString();
        }
    
    0 讨论(0)
提交回复
热议问题