科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道提供一个基于.NET的加密/解密算法

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  ??? 提供一个基于.NET SymmetricAlgorithm 类的、带私钥的加密/解密算法的包装类

作者:中国IT实验室 来源:中国IT实验室 2007年9月10日

关键字: 编程

  • 评论
  • 分享微博
  • 分享邮件
      提供一个基于.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();
   }
   }
  }

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章