MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法。<强>任何长度的任意内容强>都可以用MD5计算出散列值
。 , MD5长度一般是32位的16进制数字符串。 理论上,MD5值的个数是有限的,但是源数据是无限的,因此存在着不同的内容产生相同MD5值的概率。因此<强> MD5算法不可逆,也就是只能得到内容对应的MD5值,无法由MD5值反推内容。>强但是对不同的内容产生相同MD5值的概率非常非常非常低! , MD5算法理论上是不可逆的,因此* * *的唯一办法就是碰撞。 , 1)使用MD5进行对<强>字符串>强的操作,具体代码实现: ,,,使用System.Security.Cryptography;//需要导入这个命名空间 ……,, ,,,,静态void Main (string [] args) ,,,,{ ,,,,,,Console.WriteLine(“请输入字符串,使用MD5加密…“); ,,,,,,字符串str=Console.ReadLine (); ,,,,,,字符串md5=Md5ChuLiStr (str); ,,,,,,Console.WriteLine (md5); , ,,,,,,Console.ReadKey (); ,,,,} ,,,,,私有静态string Md5ChuLiStr(字符串味精) ,,,,{ ,,,,,,//1 .创建一个MD5对象 ,,,,,,MD5 MD5=MD5.Create (); , ,,,,,,//2 .把字符串变为一个字节数组 ,,,,,,//对于中文或者某些字符,采用不同的编码生成的byte[]是不一样的, ,,,,,,//所以造成了采用不同编码生成的md5值不一样的情况。 ,,,,,,缓冲区byte []=System.Text.Encoding.UTF8.GetBytes(味精); , ,,,,,,//3。将一个byte[]通过MD5计算得到一个新的byte[],新的byte[]就是计算MD5后的结果。 ,,,,,,byte [] md5Buffer=md5.ComputeHash(缓冲); , ,,,,,,<强>//释放资源强> <强>,,,,,,强> md5.Clear (); , ,,,,,,//4 .将计算后的结果直接显示为字符串 ,,,,,,StringBuilder某人=new StringBuilder (); ,,,,,,for (int i=0;<强>我& lt;md5Buffer.Length >强;我+ +) ,,,,,,{ ,,,,,,,,//x2:把每个数字转换为16进制,并保留两位数字。 ,,,,,,,,sb.Append (md5Buffer[我].ToString (“x2")); ,,,,,,} ,,,,,,返回sb.ToString (); ,,,,} …… , , 2)使用MD5进行对<强>文件的>强操作,具体代码实现: ,,,使用System.Security.Cryptography;//需要导入这个命名空间 ,,,使用先;//需要用到文件流等 ... ,,,,静态void Main (string [] args) ,,,,{ ,,,,,,Console.WriteLine(“请输入文件路径,使用MD5加密…“); ,,,,,,字符串路径=Console.ReadLine (); ,,,,,,字符串md5=Md5ChuLiFile(路径); ,,,,,,Console.WriteLine (md5); , ,,,,,,Console.ReadKey (); ,,,,} ,,,,私人静态string Md5ChuLiFile (string路径) ,,,,{ ,,,,,,MD5 MD5=MD5.Create (); , ,,,,,,使用(FileStream fs=File.OpenRead(路径)) ,,,,,,{ ,,,,,,,,byte [] md5Buffer=md5.ComputeHash (fs);//这里直接传入文件流对象 ,,,,,,,,md5.Clear (); , ,,,,,,,,StringBuilder某人=new StringBuilder (); ,,,,,,,,for (int i=0;我& lt;md5Buffer.Length;我+ +) ,,,,,,,,{ ,,,,,,,,,,sb.Append (md5Buffer[我].ToString (“x2")); ,,,,,,,,} ,,,,,,,,返回sb.ToString (); ,,,,,,} ,,,,} …… *:最后,产生的MD5值可以通过MD5计算器(CalcMD5.exe)进行对照。,