如何从文本文件创建MD5哈希摘要?

时间:2010-01-27 21:41:00

标签: c# hash md5

使用C#,我想创建一个文本文件的MD5哈希。我怎么能做到这一点?请包含代码。非常感谢!

更新:感谢大家的帮助。我终于确定了以下代码 -

// Create an MD5 hash digest of a file
public string MD5HashFile(string fn)
{            
    byte[] hash = MD5.Create().ComputeHash(File.ReadAllBytes(fn));
    return BitConverter.ToString(hash).Replace("-", "");            
}

4 个答案:

答案 0 :(得分:16)

这是我正在使用的例程。

    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();
    }

答案 1 :(得分:11)

简短而重要。 filename是您的文本文件名称:

using (var md5 = MD5.Create())
{
    return BitConverter.ToString(md5.ComputeHash(File.ReadAllBytes(filename))).Replace("-", "");
}

答案 2 :(得分:1)

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()));

答案 3 :(得分:0)

这是.NET Standard版本,不需要将整个文件读入内存:

    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;
    }

您可以使用上面显示的方法将byte []数组转换为字符串。另外:您可以将第三行中的“ MD5”更改为SHA1,SHA256等,以计算其他哈希。