中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
提供一个基于C++的加密/解密算法
作者:Sabine  时间:2006-10-05 12:29 出处:ccidnet.com 责编:月夜寒箫
              摘要:提供一个基于C++的加密/解密算法

提供一个基于.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();
            }
            }
            }
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有