最近要用到这个顺带收集下 [wink]
以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例:
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();
 }
 }
}
http://blog.breakn.net/article.asp?id=273
posted on 2007-02-27 11:10  mbskys  阅读(478)  评论(0)    收藏  举报