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();
}
}
}