提供一个基于C++的加密/解密算法

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  提供一个基于.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 
<a href="http://dev.21tx.com/dotnet/XML/" target="_blank">XML</a>      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();    }  }}

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答