1. MD5算法是一种散列(hash)算法(摘要算法,指纹算法),不是一种加密算法(易错)。任何长度的任意内容都可以用MD5计算出散列值。MD5的前身:MD2、MD3、MD4。介绍工具:CalcMD5.zip。主要作用就是【验明"真身"】,字符串文件均可(确保信息传输过程中的完整性、一致性)。
2. MD5算法的特点:
1. 长度固定
2. 单向性 ---- 可以通过MD5计算器来计算文件或者字符串的MD5值,但是不可以通过给出的MD5值来推算出文件或者字符串。
3. 抗冲突性(不重复)
4. "雪崩效应",只要源发生一点变化,就会造成大的变化
5. 不同的"源",生成的MD5值总是不一样的,相同的"源",产生的总是相同的MD5值。
/// <param name="msg"></param>
private static string GetMD5FromString(string msg)
using (MD5 md5 = MD5.Create())
//byte[] msgBuffer = Encoding.Default.GetBytes(msg); 使用系统默认的编码
byte[] msgBuffer = Encoding.UTF8.GetBytes(msg);
//返回值就是计算后的MD5值,如何把一个长度为16的byte[]数组转化为一个长度为32的字符串:就是把一个byte转成16进制同时保留2位即可。
byte[] md5Buffer= md5.ComputeHash(msgBuffer);
StringBuilder sbMd5=new StringBuilder();
for (int i = 0; i < md5Buffer.Length; i++)
sbMd5.Append(md5Buffer[i].ToString("x2"));
/// <param name="path"></param>
private static string GetMD5FromFile(string path)
using (MD5 md5 = MD5.Create())
using (FileStream fsRead = File.OpenRead(path))
byte[] bytes = md5.ComputeHash(fsRead);
StringBuilder sbMd5=new StringBuilder();
for (int i = 0; i < bytes.Length; i++)