项目总结-MD5的使用
MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法。任何长度的任意内容都可以用MD5计算出散列值。
MD5长度一般是32位的16进制数字符串。理论上,MD5值的个数是有限的,但是源数据是无限的,因此存在着不同的内容产生相同MD5值的概率。因此MD5算法不可逆,也就是只能得到内容对应的MD5值,无法由MD5值反推内容。但是对不同的内容产生相同MD5值的概率非常非常非常低!MD5算法理论上是不可逆的,因此***的唯一办法就是碰撞。1)使用MD5进行对字符串的操作,具体代码实现: using System.Security.Cryptography;//需要导入这个命名空间...... static void Main(string[] args) { Console.WriteLine("请输入字符串,使用MD5加密 ..."); string str = Console.ReadLine(); string md5 = Md5ChuLiStr(str); Console.WriteLine(md5); Console.ReadKey(); } private static string Md5ChuLiStr(string msg) { //1.创建一个MD5对象 MD5 md5 = MD5.Create(); //2.把字符串变为一个byte数组 //对于中文或者某些字符,采用不同的编码生成的byte[]是不一样的, //所以造成了采用不同编码生成的md5值不一样的情况。 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg); //3.将一个byte[]通过MD5计算得到一个新的byte[],新的byte[]就是计算md5后的结果。 byte[] md5Buffer = md5.ComputeHash(buffer); //释放资源 md5.Clear(); //4.将计算后的结果直接显示为字符串 StringBuilder sb = new StringBuilder(); for (int i = 0; i < md5Buffer.Length; i++) { //x2:把每个数字转换为16进制,并保留两位数字。 sb.Append(md5Buffer[i].ToString("x2")); } return sb.ToString(); }......2)使用MD5进行对文件的操作,具体代码实现: using System.Security.Cryptography;//需要导入这个命名空间 using System.IO;//需要用到文件流等... static void Main(string[] args) { Console.WriteLine("请输入文件路径,使用MD5加密 ..."); string path = Console.ReadLine(); string md5 = Md5ChuLiFile(path); Console.WriteLine(md5); Console.ReadKey(); } private static string Md5ChuLiFile(string path) { MD5 md5 = MD5.Create(); using (FileStream fs = File.OpenRead(path)) { byte[] md5Buffer = md5.ComputeHash(fs);//这里直接传入文件流对象 md5.Clear(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < md5Buffer.Length; i++) { sb.Append(md5Buffer[i].ToString("x2")); } return sb.ToString(); } }......*:最后,产生的MD5值可以通过MD5计算器(CalcMD5.exe)进行对照。声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。