Md5Helper.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. *┌──────────────────────────────────────────────────────────────┐
  3. *│ 描 述:日志相关的工具类
  4. *│ 作 者:执笔小白
  5. *│ 版 本:1.0
  6. *│ 创建时间:2020-6-13 15:40:56
  7. *└──────────────────────────────────────────────────────────────┘
  8. *┌──────────────────────────────────────────────────────────────┐
  9. *│ 命名空间: WMSTOMESTT
  10. *│ 类 名:ETools
  11. *└──────────────────────────────────────────────────────────────┘
  12. */
  13. using System.IO;
  14. using System.Security.Cryptography;
  15. using System.Text;
  16. namespace Fa_Xiaomi_N801A.MainForm.EDEHelper
  17. {
  18. public class Md5Helper
  19. {
  20. /// <summary>
  21. /// 计算字符串的MD5
  22. /// </summary>
  23. /// <param name="str">需要计算的字符串</param>
  24. /// <param name="md5_16">需不需要返回16位,默认32位</param>
  25. /// <param name="capital">需不需要返回大写,默认小写</param>
  26. /// <returns></returns>
  27. public static string GetMD5Value_String(string str = "", bool md5_16 = false, bool capital = false)
  28. {
  29. string pwd = "";
  30. MD5 md5 = MD5.Create(); //实例化一个md5对象
  31. byte[] s = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(str));
  32. // 大写
  33. if (capital)
  34. {
  35. for (int i = 0; i < s.Length; i++)
  36. {
  37. // --X为十六进制,2为每次都是两位数
  38. pwd = pwd + s[i].ToString("X2"); // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母
  39. }
  40. }
  41. else
  42. {
  43. for (int i = 0; i < s.Length; i++) // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
  44. {
  45. pwd = pwd + s[i].ToString("X2").ToLower();
  46. }
  47. }
  48. // 16位
  49. if (md5_16)
  50. {
  51. pwd = pwd.Substring(4, 16);
  52. }
  53. return pwd;
  54. }
  55. /// <summary>
  56. /// 计算文件的MD5值
  57. /// </summary>
  58. /// <param name="fileName">需要计算md5值的文件的路径</param>
  59. /// <param name="md5_16">需不需要返回16位,默认32位</param>
  60. /// <param name="capital">需不需要返回大写,默认小写</param>
  61. /// <returns></returns>
  62. public static string GetMD5Value_File(string fileName = "", bool md5_16 = false, bool capital = false)
  63. {
  64. string pwd = "";
  65. MD5 md5 = MD5.Create(); //实例化一个md5对象
  66. using (FileStream file = new FileStream(fileName, System.IO.FileMode.Open))
  67. {
  68. byte[] s = md5.ComputeHash(file);
  69. file.Close();
  70. // 大写
  71. if (capital)
  72. {
  73. for (int i = 0; i < s.Length; i++)
  74. {
  75. // --X为十六进制,2为每次都是两位数
  76. pwd = pwd + s[i].ToString("X2"); // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母
  77. }
  78. }
  79. else
  80. {
  81. for (int i = 0; i < s.Length; i++) // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
  82. {
  83. pwd = pwd + s[i].ToString("X2").ToLower();
  84. }
  85. }
  86. // 16位
  87. if (md5_16)
  88. {
  89. pwd = pwd.Substring(4, 16);
  90. }
  91. }
  92. return pwd;
  93. }
  94. }
  95. }