Encryption.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Web.Security;
  5. using System.Security.Cryptography;
  6. namespace SHJX.Service.Common.Extend
  7. {
  8. /// <summary>
  9. /// 加密
  10. /// </summary>
  11. public static class Encryption
  12. {
  13. /// <summary>
  14. /// MD5字符串加密
  15. /// </summary>
  16. /// <param name="str"></param>
  17. /// <returns>加密后字符串</returns>
  18. public static string GenerateMd5(this string str)
  19. {
  20. using var md = MD5.Create();
  21. var buffer = Encoding.Default.GetBytes(str);
  22. //开始加密
  23. var newBuffer = md.ComputeHash(buffer);
  24. var sb = new StringBuilder();
  25. foreach (var item in newBuffer)
  26. {
  27. sb.Append(item.ToString("x2"));
  28. }
  29. return sb.ToString();
  30. }
  31. /// <summary>
  32. /// MD5流加密
  33. /// </summary>
  34. /// <param name="inputStream"></param>
  35. /// <returns></returns>
  36. public static string GenerateMd5(this Stream inputStream)
  37. {
  38. using var md = MD5.Create();
  39. //开始加密
  40. var newBuffer = md.ComputeHash(inputStream);
  41. var sb = new StringBuilder();
  42. foreach (var item in newBuffer)
  43. {
  44. sb.Append(item.ToString("x2"));
  45. }
  46. return sb.ToString();
  47. }
  48. /// <summary>
  49. /// DES数据加密
  50. /// </summary>
  51. /// <param name="targetValue">目标值</param>
  52. /// <param name="key">密钥</param>
  53. /// <returns>加密值</returns>
  54. public static string Encrypt(this string targetValue, string key)
  55. {
  56. if (string.IsNullOrEmpty(targetValue)) return string.Empty;
  57. var returnValue = new StringBuilder();
  58. var des = new DESCryptoServiceProvider();
  59. var inputByteArray = Encoding.Default.GetBytes(targetValue);
  60. // 通过两次哈希密码设置对称算法的初始化向量
  61. des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
  62. (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")?.Substring(0, 8)!, "sha1")?.Substring(0, 8)!);
  63. // 通过两次哈希密码设置算法的机密密钥
  64. des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
  65. (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")?.Substring(0, 8)!, "md5")?.Substring(0, 8)!);
  66. var ms = new MemoryStream();
  67. var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
  68. cs.Write(inputByteArray, 0, inputByteArray.Length);
  69. cs.FlushFinalBlock();
  70. foreach (byte b in ms.ToArray())
  71. {
  72. returnValue.AppendFormat("{0:X2}", b);
  73. }
  74. return returnValue.ToString();
  75. }
  76. /// <summary>
  77. /// DES数据解密
  78. /// </summary>
  79. /// <param name="targetValue"></param>
  80. /// <param name="key"></param>
  81. /// <returns></returns>
  82. public static string Decrypt(this string targetValue, string key)
  83. {
  84. if (string.IsNullOrEmpty(targetValue)) return string.Empty;
  85. // 定义DES加密对象
  86. var des = new DESCryptoServiceProvider();
  87. int len = targetValue.Length / 2;
  88. var inputByteArray = new byte[len];
  89. int x, i;
  90. for (x = 0; x < len; x++)
  91. {
  92. i = Convert.ToInt32(targetValue.Substring(x * 2, 2), 16);
  93. inputByteArray[x] = (byte)i;
  94. }
  95. // 通过两次哈希密码设置对称算法的初始化向量
  96. des.Key = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
  97. (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")
  98. ?.Substring(0, 8)!, "sha1")?.Substring(0, 8)!);
  99. // 通过两次哈希密码设置算法的机密密钥
  100. des.IV = Encoding.ASCII.GetBytes(FormsAuthentication.HashPasswordForStoringInConfigFile
  101. (FormsAuthentication.HashPasswordForStoringInConfigFile(key, "md5")
  102. ?.Substring(0, 8)!, "md5")?.Substring(0, 8)!);
  103. // 定义内存流
  104. var ms = new MemoryStream();
  105. // 定义加密流
  106. var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
  107. cs.Write(inputByteArray, 0, inputByteArray.Length);
  108. cs.FlushFinalBlock();
  109. return Encoding.Default.GetString(ms.ToArray());
  110. }
  111. }
  112. }