zoukankan      html  css  js  c++  java
  • C# 获取文件MD5、SHA1

           /// <summary>
            /// 计算文件的 MD5 值
            /// </summary>
            /// <param name="fileName">要计算 MD5 值的文件名和路径</param>
            /// <returns>MD5 值16进制字符串</returns>
            public string MD5File(string fileName)
            {
                return HashFile(fileName, "md5");
            }
    
            /// <summary>
            /// 计算文件的 sha1 值
            /// </summary>
            /// <param name="fileName">要计算 sha1 值的文件名和路径</param>
            /// <returns>sha1 值16进制字符串</returns>
            public string SHA1File(string fileName)
            {
                return HashFile(fileName, "sha1");
            }
    
            /// <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("-","");
            }
  • 相关阅读:
    Linux开机自动启动ORACLE设置
    Linux Oracle服务启动&停止脚本与开机自启动
    日志挖掘(logminer)
    通过Oracle补充日志,找到锁阻塞源头的SQL
    Oracle Supplemental 补全日志介绍
    修改oracle系统参数spfile导致数据库无法启动解决
    ORA-10997:another startup/shutdown operation of this instance in progress解决方法
    Oracle DataBase单实例使用ASM案例(1)--ASM基本概念
    误删除数据文件,数据库还没有关闭
    2013全国电子设计竞赛进入国赛的项目总结
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/7307142.html
Copyright © 2011-2022 走看看