/WebSite/App_Code/CookiesHelper.cs

https://github.com/sboxzhang/JXNG · C# · 90 lines · 55 code · 20 blank · 15 comment · 1 complexity · b8669b828a305e352f2c93fbed947ff5 MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Text;
  6. using System.IO;
  7. using System.Security.Cryptography;
  8. /// <summary>
  9. ///CookiesHelper 的摘要说明
  10. /// </summary>
  11. // 这个类是实现了DES的加密和解密
  12. public class CookieHelper
  13. {
  14. //URL传输参数加密Key这个key可以自己设置支持8位这个东西很重要的,密钥
  15. static string _QueryStringKey = "e2345678";
  16. /// <summary>
  17. /// 加密算法
  18. /// </summary>
  19. public static string EncryptQueryString(string QueryString)
  20. {
  21. return Encrypt(QueryString, _QueryStringKey);
  22. }
  23. /// <summary>
  24. /// 解密算法
  25. /// </summary>
  26. public static string DecryptQueryString(string QueryString)
  27. {
  28. return Decrypt(QueryString, _QueryStringKey);
  29. }
  30. public static string Encrypt(string originalString, string sKey)
  31. {
  32. DESCryptoServiceProvider des = new DESCryptoServiceProvider();
  33. // 把字符串放到byte数组中
  34. byte[] inputByteArray = Encoding.Default.GetBytes(originalString);
  35. des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量
  36. des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //原文使用ASCIIEncoding.ASCII方法的
  37. //GetBytes方法
  38. MemoryStream ms = new MemoryStream(); //使得输入密码必须输入英文文本
  39. CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
  40. cs.Write(inputByteArray, 0, inputByteArray.Length);
  41. cs.FlushFinalBlock();
  42. StringBuilder ret = new StringBuilder();
  43. foreach (byte b in ms.ToArray())
  44. {
  45. ret.AppendFormat("{0:X2}", b);
  46. }
  47. ret.ToString();
  48. return ret.ToString();
  49. }
  50. public static string Decrypt(string originalString, string sKey)
  51. {
  52. DESCryptoServiceProvider des = new DESCryptoServiceProvider();
  53. byte[] inputByteArray = new byte[originalString.Length / 2];
  54. for (int x = 0; x < originalString.Length / 2; x++)
  55. {
  56. int i = (Convert.ToInt32(originalString.Substring(x * 2, 2), 16));
  57. inputByteArray[x] = (byte)i;
  58. }
  59. //建立加密对象的密钥和偏移量,此值重要,不能修改
  60. des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
  61. des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
  62. MemoryStream ms = new MemoryStream();
  63. CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
  64. cs.Write(inputByteArray, 0, inputByteArray.Length);
  65. cs.FlushFinalBlock();
  66. //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象
  67. StringBuilder ret = new StringBuilder();
  68. return System.Text.Encoding.Default.GetString(ms.ToArray());
  69. }
  70. }