C#代码

  1. /// <summary>
  2. /// 信息摘要算法
  3. /// </summary>
  4. public class MessageDigestAlgorithm
  5. {
  6. /// <summary>
  7. /// MD5获取哈希值
  8. /// </summary>
  9. /// <param name="data">数据</param>
  10. /// <returns>哈希值</returns>
  11. public byte[] MD5GetHash(byte[] data)
  12. {
  13. using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
  14. {
  15. return md5.ComputeHash(data);
  16. }
  17. }
  18. }

使用

  1. MessageDigestAlgorithm mda = new MessageDigestAlgorithm();
  2. string str = "为了确保项目的可用性以及可靠性,使得项目能够按质按量的完成,以至于项目成品不会再后期使用以及维护过程中出现极其严重的错误,我们编写了此测试计划。本文档将每一个可用的功能进行尽可能详尽的测试,并尝试各种可能的测试用例,找出当前软件中所存在的漏洞以及不足,为完善软件提供可参考的文本依据。12345678876543211234567887654abc";
  3. byte[] b1 = mda.MD5GetHash(Encoding.UTF8.GetBytes(str));
  4. byte[] b2 = mda.MD5GetHash(Encoding.UTF8.GetBytes(str));
  5. string s1 = System.BitConverter.ToString(b1);
  6. string s2 = System.BitConverter.ToString(b2);
  7. bool ep = s1 == s2;
  8. System.Diagnostics.Debug.WriteLine("s1:" + s1.Replace("-", string.Empty));
  9. System.Diagnostics.Debug.WriteLine("s2:" + s2);
  10. System.Diagnostics.Debug.WriteLine("ep:" + ep);

介绍

MD5全称

信息摘要算法(Message-Digest Algorithm),这个是第五版

作用

将任意长度的字符串转换成固定长度的字符串。

理解

将任意长度的字符串通过MD5算法,在运算过程中将一些信息抛弃,
最终得到一个固定长度的字符串(通常小于或等于32位);运算中有信息抛弃,导致照成运算结果不可逆。

应用

  1. 登录密码加密

注册时,将登录密码通过MD5加密,然后将加密过的密码存入数据库。等用户登录时,获取登录密码,将登录密码通过MD5加密,和数据库加密的密码对比是否一致。

  1. 文件完整性校验

有些网站下载文件的时候提供了文件的MD5值,是为了防止文件被篡改,植入病毒。
利用了MD5的性质

  • 生成MD5值小
  • 内容不一致时,MD5值会改变
    1. 其它:待补充

      后续

      现在已经不推荐使用MD5进行加密了,推荐使用更安全的SHA-2(SHA-256)。
  1. 已经有人证实了MD5存在碰撞,即2个内容不一致,但MD5值一致
  2. 简单的MD5已经能通过彩虹表破解出来了