首页 / C#开发 / 正文

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

3731 发布于: 2018-05-19 读完约需5分钟

问题描述

在.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#应用程序开发中如何在控制器(Controller)中获取ASP.NET MVC WEB 应用程序的绝对路径?

下一篇: [Vue]Vue.js中复选框列表(checkbox list)绑定数组对象并获取选中的数组对象值

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

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册