[C#].NET/C#应用程序开发中如何计算并获取一个文件的MD5校验码?

C#开发 作者: Rector 70阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.NET/C#的应用程序开发过程中,我们如何计算并获取一个文件的MD5校验码呢?

方案一

使用System.Security.Cryptography.MD5类计算,如下:

using (var md5 = MD5.Create())
{
    using (var stream = File.OpenRead(filename))
    {
        return md5.ComputeHash(stream);
    }
}

以上返回的是一个hash值,如果需要将这个hash值转换为字符串string,可以使用BitConverter处理,如下:

static string CalculateMD5(string filename)
{
    using (var md5 = MD5.Create())
    {
        using (var stream = File.OpenRead(filename))
        {
            var hash = md5.ComputeHash(stream);
            return BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();
        }
    }
}

方案二

使用System.Security.Cryptography的实现方式,如下:

using System.IO;
using System.Security.Cryptography;

public string checkMD5(string filename)
{
    using (var md5 = MD5.Create())
    {
        using (var stream = File.OpenRead(filename))
        {
            return Encoding.Default.GetString(md5.ComputeHash(stream));
        }
    }
}

方案三

使用继承HashAlgorithm的实现方式,如下:

using (FileStream fStream = File.OpenRead(filename)) {
    return GetHash<MD5>(fStream)
}

public static String GetHash<T>(Stream stream) where T : HashAlgorithm {
    StringBuilder sb = new StringBuilder();

    MethodInfo create = typeof(T).GetMethod("Create", new Type[] {});
    using (T crypt = (T) create.Invoke(null, null)) {
        byte[] hashBytes = crypt.ComputeHash(stream);
        foreach (byte bt in hashBytes) {
            sb.Append(bt.ToString("x2"));
        }
    }
    return sb.ToString();
}

方案四

另外一种简单的实现方法,如下:

byte[] ComputeHash(string filePath)
{
    using (var md5 = MD5.Create())
    {
        return md5.ComputeHash(File.ReadAllBytes(filePath));
    }
}

阅读了该文章的人还浏览了...

本文永久链接码友网 » [C#].NET/C#应用程序开发中如何计算并获取一个文件的MD5校验码?

发布于: 2018-05-19 07:53:20
分享扩散:

文章评论

获取验证码