C#加密:MD5加密


计算MD5

C# 全选
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace YESCMS.Libs
{
    public class CryptoMD5
    {

        public static string MD5Encrypt32(string sDataIn)
        {
            if (String.IsNullOrEmpty(sDataIn))
                return "";
            var b = Encoding.UTF8.GetBytes(sDataIn);
            var _md5 = new MD5CryptoServiceProvider();
            byte[] output = _md5.ComputeHash(b);
            string md5Str = BitConverter.ToString(output).Replace("-", "").ToLower();
            _md5.Clear();
            return md5Str;
        }

        /// <summary>
        /// 通过MD5CryptoServiceProvider类中的ComputeHash方法直接传入一个FileStream类实现计算MD5
        /// 操作简单,代码少,调用即可
        /// </summary>
        /// <param name="path">文件地址</param>
        /// <returns>MD5Hash</returns>
        public static string CalcFileMD5(string fileName)
        {
            if (!File.Exists(fileName))
                throw new ArgumentException(string.Format("<{0}>, 不存在", fileName));
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
            MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
            byte[] buffer = md5Provider.ComputeHash(fs);
            string resule = BitConverter.ToString(buffer);
            resule = resule.Replace("-", "");
            md5Provider.Clear();
            fs.Close();
            return resule;
        }

        public static string CalcFileMD5(Stream stream)
        {
            MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();
            byte[] buffer = md5Provider.ComputeHash(stream);
            string resule = BitConverter.ToString(buffer);
            resule = resule.Replace("-", "");
            md5Provider.Clear();
            return resule;
        }

        /// <summary>
        /// 通过HashAlgorithm的TransformBlock方法对流进行叠加运算获得MD5
        /// 实现稍微复杂,但可使用与传输文件或接收文件时同步计算MD5值
        /// 可自定义缓冲区大小,计算速度较快
        /// </summary>
        /// <param name="path">文件地址</param>
        /// <returns>MD5Hash</returns>
        public static string CalcFileMD5ByHashAlgorithm(string path)
        {
            if (!File.Exists(path))
                throw new ArgumentException(string.Format("<{0}>, 不存在", path));
            int bufferSize = 1024 * 16;//自定义缓冲区大小16K
            byte[] buffer = new byte[bufferSize];
            Stream inputStream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);
            HashAlgorithm hashAlgorithm = new MD5CryptoServiceProvider();
            int readLength = 0;//每次读取长度
            var output = new byte[bufferSize];
            while ((readLength = inputStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                //计算MD5
                hashAlgorithm.TransformBlock(buffer, 0, readLength, output, 0);
            }
            //完成最后计算,必须调用(由于上一部循环已经完成所有运算,所以调用此方法时后面的两个参数都为0)
            hashAlgorithm.TransformFinalBlock(buffer, 0, 0);
            string md5 = BitConverter.ToString(hashAlgorithm.Hash);
            hashAlgorithm.Clear();
            inputStream.Close();
            md5 = md5.Replace("-", "");
            return md5;
        }
    }
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:C#代码:byte[] 转 十六进制字符串
下一篇:C#加密:DES加密
评论列表

发表评论

评论内容
昵称:
关联文章

C#加密MD5加密
C#安全帮助类,提供MD5,AES加解密,SHA-1加密
SQL计算MD5
c#对于加密的一点整合 (AES,MD5,RSA,SHA256)
C#加密:RSA加密解密
C# RSA加密(私钥加密、公钥解密、密钥格式转换、支持超大长度分段加密)
C#加密:SHA1
C#加密:AES加密
C#加密:DES加密
文件加密技术研究
.NET DLL加密代码混淆 Eziriz .NET Reactor
windows磁盘加密,文件夹加密,打开分区需要先输入密码
Asp.net 微信H5唤起支付和支付回调
.NETCore和.NET5 MVC 控制器中判断是否登录
VSCode UI5插件配置,取消ID规则以及事件命名规则
C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比
DevExpress 组件 历史各版本下载地址【更新:V21.1.5
.Net Core 5.x Api开发笔记 -- 基础日志(Log4Net)(八)
纸壳CMS v3.5升级.Net 6免费下载
.NETCore和.NET5 MVC使用 Session

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码