ASP.NET加密解密算法分享

时间:2021-10-12 02:59:30
  1. #region DES加密解密 
  2.     /// <summary> 
  3.     /// DES加密 
  4.     /// </summary> 
  5.     /// <param name="strSource">待加密字串</param> 
  6.     /// <param name="key">32位Key值</param> 
  7.     /// <returns>加密后的字符串</returns> 
  8.     public string DESEncrypt(string strSource) 
  9.     { 
  10.       return DESEncrypt(strSource, DESKey); 
  11.     } 
  12.     public string DESEncrypt(string strSource, byte[] key) 
  13.     { 
  14.       SymmetricAlgorithm sa = Rijndael.Create(); 
  15.       sa.Key = key; 
  16.       sa.Mode = CipherMode.ECB; 
  17.       sa.Padding = PaddingMode.Zeros; 
  18.       MemoryStream ms = new MemoryStream(); 
  19.       CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write); 
  20.       byte[] byt = Encoding.Unicode.GetBytes(strSource); 
  21.       cs.Write(byt, 0, byt.Length); 
  22.       cs.FlushFinalBlock(); 
  23.       cs.Close(); 
  24.       return Convert.ToBase64String(ms.ToArray()); 
  25.     } 
  26.     /// <summary> 
  27.     /// DES解密 
  28.     /// </summary> 
  29.     /// <param name="strSource">待解密的字串</param> 
  30.     /// <param name="key">32位Key值</param> 
  31.     /// <returns>解密后的字符串</returns> 
  32.     public string DESDecrypt(string strSource) 
  33.     { 
  34.       return DESDecrypt(strSource, DESKey); 
  35.     } 
  36.     public string DESDecrypt(string strSource, byte[] key) 
  37.     { 
  38.       SymmetricAlgorithm sa = Rijndael.Create(); 
  39.       sa.Key = key; 
  40.       sa.Mode = CipherMode.ECB; 
  41.       sa.Padding = PaddingMode.Zeros; 
  42.       ICryptoTransform ct = sa.CreateDecryptor(); 
  43.       byte[] byt = Convert.FromBase64String(strSource); 
  44.       MemoryStream ms = new MemoryStream(byt); 
  45.       CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read); 
  46.       StreamReader sr = new StreamReader(cs, Encoding.Unicode); 
  47.       return sr.ReadToEnd(); 
  48.     } 
  49.     #endregion 
  50.     #region 一个用hash实现的加密解密方法 
  51.     /// <summary> 
  52.     /// 加密 
  53.     /// </summary> 
  54.     /// <param name="src"></param> 
  55.     /// <returns></returns> 
  56.     public static string EncryptStrByHash(string src) 
  57.     { 
  58.       if (src.Length == 0) 
  59.       { 
  60.         return ""
  61.       } 
  62.       byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src + "Test").ToCharArray()); 
  63.       byte[] HaData = new byte[20]; 
  64.       HMACSHA1 Hmac = new HMACSHA1(HaKey); 
  65.       CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write); 
  66.       try 
  67.       { 
  68.         cs.Write(HaData, 0, HaData.Length); 
  69.       } 
  70.       finally 
  71.       { 
  72.         cs.Close(); 
  73.       } 
  74.       string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16); 
  75.       byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray()); 
  76.       byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray()); 
  77.       byte[] EncodedBytes =  { }; 
  78.       MemoryStream ms = new MemoryStream(); 
  79.       RijndaelManaged rv = new RijndaelManaged(); 
  80.       cs = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey), CryptoStreamMode.Write); 
  81.       try 
  82.       { 
  83.         cs.Write(RiDataBuf, 0, RiDataBuf.Length); 
  84.         cs.FlushFinalBlock(); 
  85.         EncodedBytes = ms.ToArray(); 
  86.       } 
  87.       finally 
  88.       { 
  89.         ms.Close(); 
  90.         cs.Close(); 
  91.       } 
  92.       return HaResult + System.Convert.ToBase64String(EncodedBytes); 
  93.     } 
  94.     /// <summary> 
  95.     /// 解密 
  96.     /// </summary> 
  97.     /// <param name="src"></param> 
  98.     /// <returns></returns> 
  99.     public static string DecrypStrByHash(string src) 
  100.     { 
  101.       if (src.Length < 40) return ""
  102.       byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16)); 
  103.       byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray()); 
  104.       byte[] InitialText = new byte[SrcBytes.Length]; 
  105.       RijndaelManaged rv = new RijndaelManaged(); 
  106.       MemoryStream ms = new MemoryStream(SrcBytes); 
  107.       CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read); 
  108.       try 
  109.       { 
  110.         cs.Read(InitialText, 0, InitialText.Length); 
  111.       } 
  112.       finally 
  113.       { 
  114.         ms.Close(); 
  115.         cs.Close(); 
  116.       } 
  117.       System.Text.StringBuilder Result = new System.Text.StringBuilder(); 
  118.       for (int i = 0; i < InitialText.Length; ++i) if (InitialText[i] > 0) Result.Append((char)InitialText[i]); 
  119.       return Result.ToString(); 
  120.     } 
  121.     /// <summary> 
  122.     /// 对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串 
  123.     /// </summary> 
  124.     /// <param name="s"></param> 
  125.     /// <returns></returns> 
  126.     public string ReEncryptStrByHash(string s) 
  127.     { 
  128.       string e = Encrypt.EncryptStrByHash(s); 
  129.       return ((e.Length > 16) ? e.Substring(16) : ""); 
  130.     } 
  131.     #endregion 
  132.     #region Md5加密,生成16位或32位,生成的密文都是大写 
  133.     public static string Md5To16(string str) 
  134.     { 
  135.       MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 
  136.       string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(str)), 4, 8); 
  137.       t2 = t2.Replace("-"""); 
  138.       return t2; 
  139.     } 
  140.     //// <summary> 
  141.     /// MD5 32位加密 
  142.     /// </summary> 
  143.     /// <param name="str"></param> 
  144.     /// <returns></returns> 
  145.     public static string Md5To32(string str) 
  146.     { 
  147.       string pwd = ""
  148.       MD5 md5 = MD5.Create(); 
  149.       byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); 
  150.       for (int i = 0; i < s.Length; i++) 
  151.       { 
  152.         pwd = pwd + s[i].ToString("X"); 
  153.       } 
  154.       return pwd; 
  155.     } 
  156.     #endregion 
  157.     #region 3DES加密解密 
  158.     public string Encrypt3DES(string str) 
  159.     { 
  160.       //密钥 
  161.       string sKey = "wyw308"
  162.       //  //矢量,可为空 
  163.       string sIV = "scf521"
  164.       //  //构造对称算法 
  165.       SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  166.       ICryptoTransform ct; 
  167.       MemoryStream ms; 
  168.       CryptoStream cs; 
  169.       byte[] byt; 
  170.       mCSP.Key = Convert.FromBase64String(sKey); 
  171.       mCSP.IV = Convert.FromBase64String(sIV); 
  172.       mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  173.       mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  174.       ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); 
  175.       byt = Encoding.UTF8.GetBytes(str); 
  176.       ms = new MemoryStream(); 
  177.       cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  178.       cs.Write(byt, 0, byt.Length); 
  179.       cs.FlushFinalBlock(); 
  180.       cs.Close(); 
  181.       return Convert.ToBase64String(ms.ToArray()); 
  182.     } 
  183.     /// <summary> 
  184.     /// 带指定密钥和矢量的3DES加密 
  185.     /// </summary> 
  186.     /// <param name="str"></param> 
  187.     /// <param name="sKey"></param> 
  188.     /// <param name="sIV"></param> 
  189.     /// <returns></returns> 
  190.     public string Encrypt3DES(string str, string sKey, string sIV) 
  191.     { 
  192.       SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  193.       ICryptoTransform ct; 
  194.       MemoryStream ms; 
  195.       CryptoStream cs; 
  196.       byte[] byt; 
  197.       mCSP.Key = Convert.FromBase64String(sKey); 
  198.       mCSP.IV = Convert.FromBase64String(sIV); 
  199.       mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  200.       mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  201.       ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); 
  202.       byt = Encoding.UTF8.GetBytes(str); 
  203.       ms = new MemoryStream(); 
  204.       cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  205.       cs.Write(byt, 0, byt.Length); 
  206.       cs.FlushFinalBlock(); 
  207.       cs.Close(); 
  208.       return Convert.ToBase64String(ms.ToArray()); 
  209.     } 
  210.     //解密 
  211.     public string Decrypt3DES(string Value) 
  212.     { 
  213.       string sKey = "wyw308"
  214.       string sIV = "scf521"
  215.       SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  216.       ICryptoTransform ct; 
  217.       MemoryStream ms; 
  218.       CryptoStream cs; 
  219.       byte[] byt; 
  220.       mCSP.Key = Convert.FromBase64String(sKey); 
  221.       mCSP.IV = Convert.FromBase64String(sIV); 
  222.       mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  223.       mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  224.       ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); 
  225.       byt = Convert.FromBase64String(Value); 
  226.       ms = new MemoryStream(); 
  227.       cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  228.       cs.Write(byt, 0, byt.Length); 
  229.       cs.FlushFinalBlock(); 
  230.       cs.Close(); 
  231.       return Encoding.UTF8.GetString(ms.ToArray()); 
  232.     } 
  233.     /// <summary> 
  234.     /// 带指定密钥和矢量的3DES解密 
  235.     /// </summary> 
  236.     /// <param name="Value"></param> 
  237.     /// <param name="sKey"></param> 
  238.     /// <param name="sIV"></param> 
  239.     /// <returns></returns> 
  240.     public string Decrypt3DES(string str, string sKey, string sIV) 
  241.     { 
  242.       SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); 
  243.       ICryptoTransform ct; 
  244.       MemoryStream ms; 
  245.       CryptoStream cs; 
  246.       byte[] byt; 
  247.       mCSP.Key = Convert.FromBase64String(sKey); 
  248.       mCSP.IV = Convert.FromBase64String(sIV); 
  249.       mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; 
  250.       mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 
  251.       ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); 
  252.       byt = Convert.FromBase64String(str); 
  253.       ms = new MemoryStream(); 
  254.       cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); 
  255.       cs.Write(byt, 0, byt.Length); 
  256.       cs.FlushFinalBlock(); 
  257.       cs.Close(); 
  258.       return Encoding.UTF8.GetString(ms.ToArray()); 
  259.     } 
  260.     #endregion 
  261.     #region 一个简单的加密解密方法,只支持英文 
  262.     public static string EnCryptEnStr(string str) //倒序加1加密 
  263.     { 
  264.       byte[] by = new byte[str.Length]; 
  265.       for (int i = 0; 
  266.        i <= str.Length - 1; 
  267.        i++) 
  268.       { 
  269.         by[i] = (byte)((byte)str[i] + 1); 
  270.       } 
  271.       str = ""
  272.       for (int i = by.Length - 1; 
  273.        i >= 0; 
  274.        i--) 
  275.       { 
  276.         str += ((char)by[i]).ToString(); 
  277.       } 
  278.       return str; 
  279.     } 
  280.     public static string DeCryptEnStr(string str) //顺序减1解码 
  281.     { 
  282.       byte[] by = new byte[str.Length]; 
  283.       for (int i = 0; 
  284.        i <= str.Length - 1; 
  285.        i++) 
  286.       { 
  287.         by[i] = (byte)((byte)str[i] - 1); 
  288.       } 
  289.       str = ""
  290.       for (int i = by.Length - 1; 
  291.        i >= 0; 
  292.        i--) 
  293.       { 
  294.         str += ((char)by[i]).ToString(); 
  295.       } 
  296.       return str; 
  297.     } 
  298.     #endregion 
  299.     #region 一个简单的加密解密方法,在上一个的基础上支持中文 
  300.     public static string EnCryptCnStr(string str) 
  301.     { 
  302.       string htext = ""// blank text 
  303.       for (int i = 0; i < str.Length; i++) 
  304.       { 
  305.         htext = htext + (char)(str[i] + 10 - 1 * 2); 
  306.       } 
  307.       return htext; 
  308.     } 
  309.     public static string DeCryptCnStr(string str) 
  310.     { 
  311.       string dtext = ""
  312.       for (int i = 0; i < str.Length; i++) 
  313.       { 
  314.         dtext = dtext + (char)(str[i] - 10 + 1 * 2); 
  315.       } 
  316.       return dtext; 
  317.     } 
  318.     #endregion 
  319.     #region Url地址编码解码 
  320.     /// <summary> 
  321.     /// 编码Url地址 
  322.     /// </summary> 
  323.     /// <param name="url"></param> 
  324.     /// <returns></returns> 
  325.     public static string UrlEncode(string url) 
  326.     { 
  327.       byte[] mByte = null
  328.       mByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(url); 
  329.       return System.Web.HttpUtility.UrlEncode(mByte); 
  330.     } 
  331.     /// <summary> 
  332.     /// 解码Url地址 
  333.     /// </summary> 
  334.     /// <param name="url"></param> 
  335.     /// <returns></returns> 
  336.     public static string UrlDecode(string url) 
  337.     { 
  338.       return HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding("GB2312")); 
  339.     } 
  340.     #endregion 

以上所述就是本文的全部内容了,希望大家能够喜欢。