SecurityCryptography.cs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace NXWMS.Code.Security
  9. {
  10. /// <summary>
  11. /// 加密算法类
  12. /// </summary>
  13. public static class SecurityCryptography
  14. {
  15. #region Base64加密解密
  16. /// <summary>
  17. /// Base64加密
  18. /// </summary>
  19. /// <param name="input">需要加密的字符串</param>
  20. /// <returns></returns>
  21. public static string Base64Encrypt(string input)
  22. {
  23. return Base64Encrypt(input, new UTF8Encoding());
  24. }
  25. /// <summary>
  26. /// Base64加密
  27. /// </summary>
  28. /// <param name="input">需要加密的字符串</param>
  29. /// <param name="encode">字符编码</param>
  30. /// <returns></returns>
  31. public static string Base64Encrypt(string input, Encoding encode)
  32. {
  33. return Convert.ToBase64String(encode.GetBytes(input));
  34. }
  35. /// <summary>
  36. /// Base64解密
  37. /// </summary>
  38. /// <param name="input">需要解密的字符串</param>
  39. /// <returns></returns>
  40. public static string Base64Decrypt(string input)
  41. {
  42. return Base64Decrypt(input, new UTF8Encoding());
  43. }
  44. /// <summary>
  45. /// Base64解密
  46. /// </summary>
  47. /// <param name="input">需要解密的字符串</param>
  48. /// <param name="encode">字符的编码</param>
  49. /// <returns></returns>
  50. public static string Base64Decrypt(string input, Encoding encode)
  51. {
  52. return encode.GetString(Convert.FromBase64String(input));
  53. }
  54. #endregion
  55. #region MD5 HASH算法
  56. /// <summary>
  57. /// MD5 HASH算法
  58. /// </summary>
  59. /// <param name="input"></param>
  60. /// <returns></returns>
  61. public static string GetMd5Hash(string input)
  62. {
  63. if (input == null)
  64. {
  65. return null;
  66. }
  67. MD5 md5Hash = MD5.Create();
  68. // 将输入字符串转换为字节数组并计算哈希数据
  69. byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
  70. // 创建一个 Stringbuilder 来收集字节并创建字符串
  71. StringBuilder sBuilder = new StringBuilder();
  72. // 循环遍历哈希数据的每一个字节并格式化为十六进制字符串
  73. for (int i = 0; i < data.Length; i++)
  74. {
  75. sBuilder.Append(data[i].ToString("x2"));
  76. }
  77. // 返回十六进制字符串
  78. return sBuilder.ToString();
  79. }
  80. #endregion
  81. #region SHA1加密的字符串
  82. /// <summary>
  83. /// SHA1加密的字符串
  84. /// </summary>
  85. /// <param name="input"></param>
  86. /// <returns></returns>
  87. public static string GetSHA1(String input)
  88. {
  89. SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
  90. byte[] str1 = Encoding.UTF8.GetBytes(input);
  91. byte[] str2 = sha1.ComputeHash(str1);
  92. sha1.Clear();
  93. (sha1 as IDisposable).Dispose();
  94. return Convert.ToBase64String(str2);
  95. }
  96. #endregion
  97. #region DES加密
  98. /// <summary>
  99. /// DES加密
  100. /// </summary>
  101. /// <param name="data">加密数据</param>
  102. /// <param name="key">8位字符的密钥字符串</param>
  103. /// <param name="iv">8位字符的初始化向量字符串</param>
  104. /// <returns></returns>
  105. public static string DESEncrypt(string data, string key = "thuman..", string iv = "thuman..")
  106. {
  107. byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
  108. byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
  109. DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
  110. int i = cryptoProvider.KeySize;
  111. MemoryStream ms = new MemoryStream();
  112. CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
  113. StreamWriter sw = new StreamWriter(cst);
  114. sw.Write(data);
  115. sw.Flush();
  116. cst.FlushFinalBlock();
  117. sw.Flush();
  118. return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
  119. }
  120. #endregion
  121. #region DES解密
  122. /// <summary>
  123. /// DES解密
  124. /// </summary>
  125. /// <param name="data">解密数据</param>
  126. /// <param name="key">8位字符的密钥字符串(需要和加密时相同)</param>
  127. /// <param name="iv">8位字符的初始化向量字符串(需要和加密时相同)</param>
  128. /// <returns></returns>
  129. public static string DESDecrypt(string data, string key="thuman..", string iv= "thuman..")
  130. {
  131. byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
  132. byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv);
  133. byte[] byEnc;
  134. try
  135. {
  136. byEnc = Convert.FromBase64String(data);
  137. }
  138. catch
  139. {
  140. return null;
  141. }
  142. DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
  143. MemoryStream ms = new MemoryStream(byEnc);
  144. CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
  145. StreamReader sr = new StreamReader(cst);
  146. return sr.ReadToEnd();
  147. }
  148. #endregion
  149. }
  150. }