SecurityCryptography.cs 5.6 KB

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