C# 获取文件MD5、SHA1的值

/// <summary>
    /// 文件校验
    /// </summary>
    public class FileCheck
    {
        /// <summary>
        /// 计算文件的 MD5 值
        /// </summary>
        /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
        /// <returns>MD5 值16进制字符串</returns>
        public string MD5File(string fileName)
        {
            try
            {
                return HashFile(fileName, "md5");
            }
            catch {
                return null;
            }
        }

        /// <summary>
        /// 计算文件的 sha1 值
        /// </summary>
        /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
        /// <returns>sha1 值16进制字符串</returns>
        public string SHA1File(string fileName)
        {
            try
            {
                return HashFile(fileName, "sha1");
            }
            catch {
                return null;
            }
        }

        /// <summary>
        /// 计算文件的哈希值
        /// </summary>
        /// <param name="fileName">要计算哈希值的文件名和路径</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值16进制字符串</returns>
        private string HashFile(string fileName, string algName)
        {
            if (!System.IO.File.Exists(fileName))
                return string.Empty;

            System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            byte[] hashBytes = HashData(fs, algName);
            fs.Close();
            return ByteArrayToHexString(hashBytes);
        }

        /// <summary>
        /// 计算哈希值
        /// </summary>
        /// <param name="stream">要计算哈希值的 Stream</param>
        /// <param name="algName">算法:sha1,md5</param>
        /// <returns>哈希值字节数组</returns>
        private byte[] HashData(System.IO.Stream stream, string algName)
        {
            System.Security.Cryptography.HashAlgorithm algorithm;
            if (algName == null)
            {
                throw new ArgumentNullException("algName 不能为 null");
            }
            if (string.Compare(algName, "sha1", true) == 0)
            {
                algorithm = System.Security.Cryptography.SHA1.Create();
            }
            else
            {
                if (string.Compare(algName, "md5", true) != 0)
                {
                    throw new Exception("algName 只能使用 sha1 或 md5");
                }
                algorithm = System.Security.Cryptography.MD5.Create();
            }
            return algorithm.ComputeHash(stream);
        }

        /// <summary>
        /// 字节数组转换为16进制表示的字符串
        /// </summary>
        private string ByteArrayToHexString(byte[] buf)
        {
            return BitConverter.ToString(buf).Replace("-", "");
        }
    }
时间: 2024-10-17 06:42:07

C# 获取文件MD5、SHA1的值的相关文章

QT 获取文件MD5值

[cpp] view plain copy /* 方法1 */ QFile theFile(fileNamePath); theFile.open(QIODevice::ReadOnly); QByteArray ba = QCryptographicHash::hash(theFile.readAll(), QCryptographicHash::Md5); theFile.close(); qDebug() << ba.toHex().constData(); [cpp] view pla

js获取文件md5库

在做文件系统时,上传下载需要获取到文件的md5. 上传获取文件md5优点:将文件md5传至后段服务器,若服务器已存在该文件,则将该文件关联,实现'秒传'的功能. 下载获取文件md5优点:下载文件完成后将文件md5传给后端,后端判断文件下载是否完整. ##js-spark-md5类库实现快速获取文件md5 demo如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF

C# 获取文件MD5与SHA1

第一个方法直接使用 FileInfo 类构造函数传入路径就可以了,因为是做控制台可以直接拖拽文件,这一点还是很方便的. 需要注意的是路径中有空格会报错. 该方法中 s 代表传入的文件路径  1 static void GetFile(string s) 2         { 3             try 4             { 5                 FileInfo fi = new FileInfo(s); 6                 Console.Wr

python 文件MD5 SHA1校验计算

#coding: GBK #md5SHA1文件校验值计算 #使用方法: python 文件.py  验证文件 import hashlib import sys import os defmd5_sum(filename):     #校验值方法 fd=open(filename,"rb") #打开文件 fd.seek(0)             #将文件打操作标记移到offset的位置 line=fd.readline()     #读取文件第一行进入line #md5校验值计算

Java 获取 文件md5校验码

讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个虚假的断点续传请求,从若干url上将一个正常文件拼接出来. 查了下资料,java也可以实现文件md5校验码获取,代码如下: import java.io.File;import java.io.FileInputStream;import java.io.IOException;import jav

JAVA中获取文件MD5值的方法

1 DigestUtils.md5Hex(new FileInputStream(path)); 如果你只需要使用标准的MD5,其实一行代码就够了,JAVA自带的commons-codec包就提供了获取16进制MD5值的方法.其底层实现上,也是分多次将一个文件读入,类似方法三.所以性能上也不错. 总结:其实方法都是类似的,推荐使用这个方法,简洁且性能不错,当然,如果要做一些调整什么的,可以根据自己的需求进行方法的选择. PS:其实还有一个重点,就是如何知道自己生成的MD5值是否正确呢? 方法很多

获取文件Md5值

private static string GetFileMD5(string filePath) { string _md5Value = string.Empty; try { if (System.IO.File.Exists(filePath)) { FileStream file = new FileStream(filePath, FileMode.Open); System.Security.Cryptography.MD5 md5 = new System.Security.Cr

winrt获取文件MD5码

//小文件 public static string ComputeMD5(byte[] bytes) { var alg = HashAlgorithmProvider.OpenAlgorithm("MD5"); IBuffer buff = CryptographicBuffer.CreateFromByteArray(bytes); var hashed = alg.HashData(buff); var res = CryptographicBuffer.EncodeToHex

C# 获取文件MD5校验码

using System; using System.IO; using System.Security.Cryptography; using System.Text; public class MD5Code { /// <summary> /// Get 文件的MD5校验码 /// </summary> /// <param name="fileName">文件名称</param> /// <returns></r