DotNet中几种常用的加密算法

在.NET项目中,我们较多的使用到加密这个操作。因为在现代的项目中,对信息安全的要求越来越高,那么多信息的加密就变得至关重要。现在提供几种常用的加密/解密算法。

  1.用于文本和Base64编码文本的互相转换 和 Byte[]和Base64编码文本的互相转换:

    (1).将普通文本转换成Base64编码的文本


 
  1.         /// <summary>  
  2.         /// 将普通文本转换成Base64编码的文本  
  3.         /// </summary>  
  4.         /// <param name="value">普通文本</param>  
  5.         /// <returns></returns>  
  6.         public static string StringToBase64String(string value)  
  7.         {  
  8.             if (string.IsNullOrEmpty(value))  
  9.             {  
  10.                 throw new ArgumentNullException(value);  
  11.             }  
  12.             try  
  13.             {  
  14.                 var binBuffer = (new UnicodeEncoding()).GetBytes(value);  
  15.                 var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * 4;  
  16.                 var charBuffer = new char[base64ArraySize];  
  17.                 Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);  
  18.                 var s = new string(charBuffer);  
  19.                 return s;  
  20.             }  
  21.             catch (Exception ex)  
  22.             {  
  23.                 throw new Exception(ex.Message);  
  24.             }  
  25.   
  26.         }  

(2).将Base64编码的文本转换成普通文本

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 将Base64编码的文本转换成普通文本  
  3.         /// </summary>  
  4.         /// <param name="base64">Base64编码的文本</param>  
  5.         /// <returns></returns>  
  6.         public static string Base64StringToString(string base64)  
  7.         {  
  8.             if (string.IsNullOrEmpty(base64))  
  9.             {  
  10.                 throw new ArgumentNullException(base64);  
  11.             }  
  12.             try  
  13.             {  
  14.                 var charBuffer = base64.ToCharArray();  
  15.                 var bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);  
  16.                 return (new UnicodeEncoding()).GetString(bytes);  
  17.             }  
  18.             catch (Exception ex)  
  19.             {  
  20.                 throw new Exception(ex.Message);  
  21.             }  
  22.         }  

(3).将Byte[]转换成Base64编码文本

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 将Byte[]转换成Base64编码文本  
  3.         /// </summary>  
  4.         /// <param name="binBuffer">Byte[]</param>  
  5.         /// <returns></returns>  
  6.         public string ToBase64(byte[] binBuffer)  
  7.         {  
  8.             if (binBuffer == null)  
  9.             {  
  10.                 throw new ArgumentNullException("binBuffer");  
  11.             }  
  12.             try  
  13.             {  
  14.                 var base64ArraySize = (int)Math.Ceiling(binBuffer.Length / 3d) * 4;  
  15.                 var charBuffer = new char[base64ArraySize];  
  16.                 Convert.ToBase64CharArray(binBuffer, 0, binBuffer.Length, charBuffer, 0);  
  17.                 var s = new string(charBuffer);  
  18.                 return s;  
  19.             }  
  20.             catch (Exception ex)  
  21.             {  
  22.                 throw new Exception(ex.Message);  
  23.             }  
  24.   
  25.         }  

 (4).将Base64编码文本转换成Byte[]

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 将Base64编码文本转换成Byte[]  
  3.         /// </summary>  
  4.         /// <param name="base64">Base64编码文本</param>  
  5.         /// <returns></returns>  
  6.         public byte[] Base64ToBytes(string base64)  
  7.         {  
  8.             if (string.IsNullOrEmpty(base64))  
  9.             {  
  10.                 throw new ArgumentNullException(base64);  
  11.             }  
  12.             try  
  13.             {  
  14.                 var charBuffer = base64.ToCharArray();  
  15.                 var bytes = Convert.FromBase64CharArray(charBuffer, 0, charBuffer.Length);  
  16.                 return bytes;  
  17.             }  
  18.             catch (Exception ex)  
  19.             {  
  20.                 throw new Exception(ex.Message);  
  21.             }  
  22.         }  

2. DES加密/解密类。

  (1).加密

[c#]  view plain  copy
 
  1. private static readonly string KEY = "pengze0902";  
  2.   
  3.         /// <summary>  
  4.         /// 加密  
  5.         /// </summary>  
  6.         /// <param name="Text"></param>  
  7.         /// <returns></returns>  
  8.         public static string Encrypt(string Text)  
  9.         {  
  10.             return Encrypt(Text, KEY);  
  11.         }  
  12.         /// <summary>   
  13.         /// 加密数据   
  14.         /// </summary>   
  15.         /// <param name="Text"></param>   
  16.         /// <param name="sKey"></param>   
  17.         /// <returns></returns>   
  18.         public static string Encrypt(string Text, string sKey)  
  19.         {  
  20.             var des = new DESCryptoServiceProvider();  
  21.             var inputByteArray = Encoding.Default.GetBytes(Text);  
  22.             var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));  
  23.             des.Key = bKey;  
  24.             des.IV = bKey;  
  25.             var ms = new System.IO.MemoryStream();  
  26.             var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);  
  27.             cs.Write(inputByteArray, 0, inputByteArray.Length);  
  28.             cs.FlushFinalBlock();  
  29.             var ret = new StringBuilder();  
  30.             foreach (byte b in ms.ToArray())  
  31.             {  
  32.                 ret.AppendFormat("{0:X2}", b);  
  33.             }  
  34.             return ret.ToString();  
  35.         }  

(2).解密

[c#]  view plain  copy
 
  1. private static readonly string KEY = "pengze0902";  
  2.         /// <summary>  
  3.         /// 解密  
  4.         /// </summary>  
  5.         /// <param name="text"></param>  
  6.         /// <returns></returns>  
  7.         public static string Decrypt(string text)  
  8.         {  
  9.             return Decrypt(text, KEY);  
  10.         }  
  11.   
  12.         /// <summary>   
  13.         /// 解密数据   
  14.         /// </summary>   
  15.         /// <param name="text"></param>   
  16.         /// <param name="sKey"></param>   
  17.         /// <returns></returns>   
  18.         public static string Decrypt(string text, string sKey)  
  19.         {  
  20.             var des = new DESCryptoServiceProvider();  
  21.             var len = text.Length / 2;  
  22.             byte[] inputByteArray = new byte[len];  
  23.             int x;  
  24.             for (x = 0; x < len; x++)  
  25.             {  
  26.                 var i = Convert.ToInt32(text.Substring(x * 2, 2), 16);  
  27.                 inputByteArray[x] = (byte)i;  
  28.             }  
  29.             var bKey = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));  
  30.             des.Key = bKey;  
  31.             des.IV = bKey;  
  32.             System.IO.MemoryStream ms = new System.IO.MemoryStream();  
  33.             CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);  
  34.             cs.Write(inputByteArray, 0, inputByteArray.Length);  
  35.             cs.FlushFinalBlock();  
  36.             return Encoding.Default.GetString(ms.ToArray());  
  37.         }  

(3).取得MD5加密串

[c#]  view plain  copy
 
  1.         //// <summary>  
  2.         /// 取得MD5加密串  
  3.         /// </summary>  
  4.         /// <param name="input">源明文字符串</param>  
  5.         /// <returns>密文字符串</returns>  
  6.         public static string Md5Hash(string input)  
  7.         {  
  8.             var md5 = new MD5CryptoServiceProvider();  
  9.             var bs = Encoding.UTF8.GetBytes(input);  
  10.             bs = md5.ComputeHash(bs);  
  11.             var s = new StringBuilder();  
  12.             foreach (var b in bs)  
  13.             {  
  14.                 s.Append(b.ToString("x2").ToUpper());  
  15.             }  
  16.             var password = s.ToString();  
  17.             return password;  
  18.         }  

3.MD5加密

   (1). 32位大写

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 32位大写  
  3.         /// </summary>  
  4.         /// <returns></returns>  
  5.         public static string Upper32(string s)  
  6.         {  
  7.             var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");  
  8.             if (hashPasswordForStoringInConfigFile != null)  
  9.                 s = hashPasswordForStoringInConfigFile.ToString();  
  10.             return s.ToUpper();  
  11.         }  

 (2). 32位小写

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 32位小写  
  3.         /// </summary>  
  4.         /// <returns></returns>  
  5.         public static string Lower32(string s)  
  6.         {  
  7.             var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");  
  8.             if (hashPasswordForStoringInConfigFile != null)  
  9.                 s = hashPasswordForStoringInConfigFile.ToString();  
  10.             return s.ToLower();  
  11.         }  

(3).16位大写

[c#]  view plain  copy
 
  1.          /// <summary>  
  2.         /// 16位大写  
  3.         /// </summary>  
  4.         /// <returns></returns>  
  5.         public static string Upper16(string s)  
  6.         {  
  7.             var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");  
  8.             if (hashPasswordForStoringInConfigFile != null)  
  9.                 s = hashPasswordForStoringInConfigFile.ToString();  
  10.             return s.ToUpper().Substring(8, 16);  
  11.         }  

(4).16位小写

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 16位小写  
  3.         /// </summary>  
  4.         /// <returns></returns>  
  5.         public static string Lower16(string s)  
  6.         {  
  7.             var hashPasswordForStoringInConfigFile = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "md5");  
  8.             if (hashPasswordForStoringInConfigFile != null)  
  9.                 s = hashPasswordForStoringInConfigFile.ToString();  
  10.             return s.ToLower().Substring(8, 16);  
  11.         }  

4.Sha1签名算法

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 签名算法  
  3.         /// </summary>  
  4.         /// <param name="str"></param>  
  5.         /// <returns></returns>  
  6.         public static string GetSha1(string str)  
  7.         {  
  8.             if (string.IsNullOrEmpty(str))  
  9.             {  
  10.                 throw new ArgumentNullException(str);  
  11.             }  
  12.             try  
  13.             {  
  14.                 //建立SHA1对象  
  15.                 SHA1 sha = new SHA1CryptoServiceProvider();  
  16.                 //将mystr转换成byte[]   
  17.                 var enc = new ASCIIEncoding();  
  18.                 var dataToHash = enc.GetBytes(str);  
  19.                 //Hash运算  
  20.                 var dataHashed = sha.ComputeHash(dataToHash);  
  21.                 //将运算结果转换成string  
  22.                 var hash = BitConverter.ToString(dataHashed).Replace("-", "");  
  23.                 return hash;  
  24.             }  
  25.             catch (Exception ex)  
  26.             {  
  27.                 throw new Exception(ex.Message);  
  28.             }  
  29.   
  30.         }  

5.Sha256加密算法

[c#]  view plain  copy
 
  1.         /// <summary>  
  2.         /// 将字符串转换为sha256散列  
  3.         /// </summary>  
  4.         /// <param name="data">字符串进行转换</param>  
  5.         /// <returns>sha256散列或null</returns>  
  6.         public static string ToSha256(this string data)  
  7.         {  
  8.             try  
  9.             {  
  10.                 if (string.IsNullOrEmpty(data))  
  11.                     return null;  
  12.   
  13.                 var hashValue = new SHA256Managed().ComputeHash(Encoding.UTF8.GetBytes(data));  
  14.                 var hex = hashValue.Aggregate("", (current, x) => current + String.Format("{0:x2}", x));  
  15.   
  16.                 if (string.IsNullOrEmpty(hex))  
  17.                     throw new Exception("Erro creating SHA256 hash");  
  18.   
  19.                 return hex;  
  20.             }  
  21.             catch (Exception e)  
  22.             {  
  23.                 throw new Exception(e.Message, e);  
  24.             }  
  25.         }  

  以上是一些较为常用的算法代码。

本文出自 “彭泽0902” 博客,请务必保留此出处http://pengze0902.blog.51cto.com/7693836/1864304

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pengze0902/article/details/53366292

猜你喜欢

转载自www.cnblogs.com/hezhengyi/p/9334697.html