MD5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace _01字符串Md5计算与文件Md5计算
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 计算字符串的Md5值
            //while (true)
            //{
            //    Console.WriteLine("请输入一个字符串:");
            //    string msg = Console.ReadLine();
            //    string md5Str = Md5EncryptFromString(msg);
            //    Console.WriteLine(md5Str);
            //}
            #endregion
            #region 计算文件的Md5值
            //while (true)
            //{
            //    Console.WriteLine("请输入文件路径:");
            //    string path = Console.ReadLine();
            //    string md5File = Md5EncryptFromFile(path);
            //    Console.WriteLine(md5File);
            //}
            #endregion
            //using (MD5 md5 = MD5.Create())
            //{
            //}
            //MD5 md5 = MD5.Create();
            //md5.Dispose
            //FileStream fs;
            //fs.Dispose(
        }
        /// <summary>
        /// 根据文件路径,计算文件的Md5值。
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        private static string Md5FromFile(string path)
        {
            //1.创建Md5对象
            MD5 md5 = MD5.Create();
            using (FileStream fs = File.OpenRead(path))
            {
                byte[] byts = md5.ComputeHash(fs);
                md5.Clear();
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < byts.Length; i++)
                {
                    sb.Append(byts[i].ToString("x2"));
                }
                return sb.ToString();
            }
        }
        /// <summary>
        /// 计算字符串的Md5值
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        static string Md5FromString(string msg)
        {
            //创建了一个计算Md5值的对象
            MD5 md5 = MD5.Create();
            //先计算出msg字符串的byte数组
            //把字符串msg,根据utf-8编码,计算出byte[]
            //对于包含中文的字符串,计算字符串时如果采用不同的编码,比如utf-8或gb2312,所以计算出来的byte[]不同,进而通过ComputeHash(byte[])计算出的md5值也不同,所以建议大家计算md5值时都采用统一的编码,utf-8.
            byte[] byts = System.Text.Encoding.UTF8.GetBytes(msg);
            #region 1
            //根据byte[]数组,还原原来的字符串
            //string msg1=System.Text.Encoding.UTF8.GetString(byts);
            #endregion
            //开始计算Md5值。
            byte[] md5Byts = md5.ComputeHash(byts);
            //释放资源
            md5.Clear();
            //获取字符串
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < md5Byts.Length; i++)
            {
                sb.Append(md5Byts[i].ToString("x2"));
            }
            return sb.ToString();
        }
    }
}
posted @ 2013-05-10 08:04  nieyulin  阅读(168)  评论(0编辑  收藏  举报