DESCrypt.cs 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Security.Cryptography;
  5. using System.Text;
  6. namespace HaBookCms.Common.CryptHelper
  7. {
  8. public class DESCrypt
  9. {
  10. #region ========算法========
  11. private static string key;//密钥
  12. static DESCrypt()
  13. {
  14. key = "HaBookTeamModel2019";
  15. }
  16. private static byte[] Keys = new byte[] { 0x12, 0x34, 0x56, 120, 0x90, 0xab, 0xcd, 0xef };//8个bit位,是DES算法的初始化向量 加解密钥也是8位;
  17. /// <summary>
  18. /// 解密字符串
  19. /// </summary>
  20. /// <param name="decryptString">是要被解密的密文数据</param>
  21. /// <param name="decryptKey">DES算法的工作密钥</param>
  22. /// <returns>明文</returns>
  23. public static string Decrypt(string decryptString, string decryptKey)
  24. {
  25. try
  26. {
  27. decryptKey = Utils.GetSubString(decryptKey, 8, "");
  28. decryptKey = decryptKey.PadRight(8, ' ');
  29. byte[] bytes = Encoding.UTF8.GetBytes(decryptKey);
  30. byte[] keys = Keys;
  31. byte[] buffer = Convert.FromBase64String(decryptString);
  32. DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
  33. MemoryStream stream = new MemoryStream();
  34. CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(bytes, keys), CryptoStreamMode.Write);
  35. stream2.Write(buffer, 0, buffer.Length);
  36. stream2.FlushFinalBlock();
  37. return Encoding.UTF8.GetString(stream.ToArray());
  38. }
  39. catch
  40. {
  41. return "";
  42. }
  43. }
  44. /// <summary>
  45. /// 加密
  46. /// </summary>
  47. /// <param name="decryptString">要被加密数据</param>
  48. /// <param name="decryptKey">DES算法的工作密钥</param>
  49. /// <returns>密文</returns>
  50. public static string Encrypt(string encryptString, string encryptKey)
  51. {
  52. encryptKey = Utils.GetSubString(encryptKey, 8, "");
  53. encryptKey = encryptKey.PadRight(8, ' ');
  54. byte[] bytes = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
  55. byte[] keys = Keys;
  56. byte[] buffer = Encoding.UTF8.GetBytes(encryptString);
  57. DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
  58. MemoryStream stream = new MemoryStream();
  59. CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(bytes, keys), CryptoStreamMode.Write);
  60. stream2.Write(buffer, 0, buffer.Length);
  61. stream2.FlushFinalBlock();
  62. return Convert.ToBase64String(stream.ToArray());//Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节。
  63. //Base64编码可用于在HTTP环境下传递较长的标识信息,如较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数,或者将二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
  64. }
  65. #endregion
  66. #region ========加密========
  67. /// <summary>
  68. /// 加密
  69. /// </summary>
  70. /// <param name="Text"></param>
  71. /// <returns></returns>
  72. public static string Encrypt(string Text)
  73. {
  74. return Encrypt(Text, key);
  75. }
  76. #endregion
  77. #region ========解密========
  78. /// <summary>
  79. /// 解密
  80. /// </summary>
  81. /// <param name="Text"></param>
  82. /// <returns></returns>
  83. public static string Decrypt(string Text)
  84. {
  85. return Decrypt(Text, key);
  86. }
  87. #endregion
  88. }
  89. }