C#可逆加密算法收集

12/12/2008来源:C#应用人气:12006

最近要用到这个顺带收集下 
以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:view plaincopy to clipboardPRint?
using System;  
using System.IO;  
using System.Security.Cryptography;  
 
using System.Text;  
 
namespace DataCrypto  
{  
 /// <summary>  
 /// 对称加密算法类  
 /// </summary>  
 public class SymmetricMethod  
 {  
   
 private SymmetricAlgorithm mobjCryptoService;  
 private string Key;  
 /// <summary>  
 /// 对称加密类的构造函数  
 /// </summary>  
 public SymmetricMethod()  
 {  
 mobjCryptoService = new RijndaelManaged();  
 Key = "Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7";  
 }  
 /// <summary>  
 /// 获得密钥  
 /// </summary>  
 /// <returns>密钥</returns>  
 private byte[] GetLegalKey()  
 {  
 string sTemp = Key;  
 mobjCryptoService.GenerateKey();  
 byte[] bytTemp = mobjCryptoService.Key;  
 int KeyLength = bytTemp.Length;  
 if (sTemp.Length > KeyLength)  
 sTemp = sTemp.Substring(0, KeyLength);  
 else if (sTemp.Length < KeyLength)  
 sTemp = sTemp.PadRight(KeyLength, ' ');  
 return ASCIIEncoding.ASCII.GetBytes(sTemp);  
 }  
 /// <summary>  
 /// 获得初始向量IV  
 /// </summary>  
 /// <returns>初试向量IV</returns>  
 private byte[] GetLegalIV()  
 {  
 string sTemp = "E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk";  
 mobjCryptoService.GenerateIV();  
 byte[] bytTemp = mobjCryptoService.IV;  
 int IVLength = bytTemp.Length;  
 if (sTemp.Length > IVLength)  
 sTemp = sTemp.Substring(0, IVLength);  
 else if (sTemp.Length < IVLength)  
 sTemp = sTemp.PadRight(IVLength, ' ');  
 return ASCIIEncoding.ASCII.GetBytes(sTemp);  
 }  
 /// <summary>  
 /// 加密方法  
 /// </summary>  
 /// <param name="Source">待加密的串</param>  
 /// <returns>经过加密的串</returns>  
 public string Encrypto(string Source)  
 {  
 byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source);  
 MemoryStream ms = new MemoryStream();  
 mobjCryptoService.Key = GetLegalKey();  
 mobjCryptoService.IV = GetLegalIV();  
 ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();  
 CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);  
 cs.Write(bytIn, 0, bytIn.Length);  
 cs.FlushFinalBlock();  
 ms.Close();  
 byte[] bytOut = ms.ToArray();  
 return Convert.ToBase64String(bytOut);  
 }  
 /// <summary>  
 /// 解密方法  
 /// </summary>  
 /// <param name="Source">待解密的串</param>  
 /// <returns>经过解密的串</returns>  
 public string Decrypto(string Source)  
 {  
 byte[] bytIn = Convert.FromBase64String(Source);  
 MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length);  
 mobjCryptoService.Key = GetLegalKey();  
 mobjCryptoService.IV = GetLegalIV();  
 ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();  
 CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);  
 StreamReader sr = new StreamReader(cs);  
 return sr.ReadToEnd();  
 }  
 }