DESCrypt.cs 4.1 KB

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