首页 | 旅游 | 健康 | 时尚 | 下载 | 论坛 | 图文 | 专题 | 地图
资讯 IT人 电脑入门 操作系统 上网 办公 技巧 硬件 软件 网络 图像 多媒体 程序 数据库 网页制作 网站开发 网游 安全 加密 企业

提供一个基于.NET的加密/解密算法

巧巧读书 2006-12-06   技术论坛
    提供一个基于.NET SymmetricAlgorithm 类的、带私钥的加密/解密算法的包装类。使用方法:
  
  SymmCrypto de = new SymmCrypto(SymmCrypto.SymmProvEnum.DES);
  Response.Write(x.Decrypting(de.Encrypting("ok","yyy"),"yyy"));
  类的实现C#编码
  
  using System;
  using System.Security.Cryptography;
  using System.IO;
  using System.Text;
  
  namespace eMeng
  {
   /// <summary>
   /// SymmCrypto 的摘要说明。
   /// SymmCrypto类实现.NET框架下的加密和解密服务。
   /// 原作者: Frank Fang : fangfrank@hotmail.com
   /// </summary>
   public class SymmCrypto
   {
   public enum SymmProvEnum : int
   {
   DES, RC2, Rijndael
   }
  
   private SymmetricAlgorithm mobjCryptoService;
  
   /// <remarks>
   /// 使用.Net SymmetricAlgorithm 类的构造器.
   /// </remarks>
   public SymmCrypto(SymmProvEnum NetSelected)
   {
   switch (NetSelected)
   {
   case SymmProvEnum.DES:
   mobjCryptoService = new DESCryptoServiceProvider();
   break;
   case SymmProvEnum.RC2:
   mobjCryptoService = new RC2CryptoServiceProvider();
   break;
   case SymmProvEnum.Rijndael:
   mobjCryptoService = new RijndaelManaged();
   break;
   }
   }
  
   /// <remarks>
   /// 使用自定义SymmetricAlgorithm类的构造器.
   /// </remarks>
   public SymmCrypto(SymmetricAlgorithm ServiceProvider)
   {
   mobjCryptoService = ServiceProvider;
   }
  
   /// <remarks>
   /// Depending on the legal key size limitations of
   /// a specific CryptoService provider and length of
   /// the private key provided, padding the secret key
   /// with space character to meet the legal size of the algorithm.
   /// </remarks>
   private byte[] GetLegalKey(string Key)
   {
   string sTemp;
   if (mobjCryptoService.LegalKeySizes.Length > 0)
   {
   int lessSize = 0, moreSize = mobjCryptoService.LegalKeySizes[0].MinSize;
   // key sizes are in bits
   while (Key.Length * 8 > moreSize)
   {
   lessSize = moreSize;
   moreSize += mobjCryptoService.LegalKeySizes[0].SkipSize;
   }
   sTemp = Key.PadRight(moreSize / 8, ' ');
   }
   else
   sTemp = Key;
  
   // convert the secret key to byte array
   return ASCIIEncoding.ASCII.GetBytes(sTemp);
   }
  
   public string Encrypting(string Source, string Key)
   {
   byte[] bytIn = System.Text.ASCIIEncoding.ASCII.GetBytes(Source);
   // create a MemoryStream so that the process can be done without I/O files
   System.IO.MemoryStream ms = new System.IO.MemoryStream();
  
   byte[] bytKey = GetLegalKey(Key);
  
   // set the private key
   mobjCryptoService.Key = bytKey;
   mobjCryptoService.IV = bytKey;
  
   // create an Encryptor from the Provider Service instance
   ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();
  
   // create Crypto Stream that transforms a stream using the encryption
   CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);
  
   // write out encrypted content into MemoryStream
   cs.Write(bytIn, 0, bytIn.Length);
   cs.FlushFinalBlock();
  
   // get the output and trim the '\0' bytes
   byte[] bytOut = ms.GetBuffer();
   int i = 0;
   for (i = 0; i < bytOut.Length; i++)
   if (bytOut[i] == 0)
   break;
  
   // convert into Base64 so that the result can be used in xml
   return System.Convert.ToBase64String(bytOut, 0, i);
   }
  
   public string Decrypting(string Source, string Key)
   {
   // convert from Base64 to binary
   byte[] bytIn = System.Convert.FromBase64String(Source);
   // create a MemoryStream with the input
   System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);
  
   byte[] bytKey = GetLegalKey(Key);
  
   // set the private key
   mobjCryptoService.Key = bytKey;
   mobjCryptoService.IV = bytKey;
  
   // create a Decryptor from the Provider Service instance
   ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
  
   // create Crypto Stream that transforms a stream using the decryption
   CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);
  
   // read out the result from the Crypto Stream
   System.IO.StreamReader sr = new System.IO.StreamReader( cs );
   return sr.ReadToEnd();
   }
   }
  }
下一个话题:C#代码关闭Windows XP
本类最热图文
巧巧读书图文推荐
Google
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章