首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>C#语言>提供一个基于.NET的加密/解密算法
提供一个基于.NET的加密/解密算法
来源: 发布时间:2007-09-05 发布人: 浏览: 人次   字体: [ ]  

提供一个基于.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(); } } }

相 关 文 章   发布商链接
·在.NET中产生随机密码字符串
·用C#实现查询IP所在区段的功能
·实例解释C#中Dispose和Close的区别
·C#区别和认识四个判等函数
·c#中的ArrayList属性祥解及其语法...
·C#中关于四舍五入函数的讨论及其解...
·使用C#编写查询IP段功能的程序
·关于C#在lucene.net下的中文切词
·关于C#程序中Bug的快速修复方法
·代码分析如何构造一个C#语言的爬虫程...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·有助快速理解C#委托和事件之...
·C#泛型学习笔记总结
·c#语言从dbf数据库提取数据并
·C#编写控制线程的运行和线程...
·怎样在C#中删除只读文件及其...
·C#函数中返回多个值的两种方...
·如何在C#中插入照片到Excel文
·如何在c#中获取事件注册的方...
·C#对timer类的使用操作代码
·什么是泛型?泛型的一些概述
·C#如何从文本文件读取信息并...
·如何在c#中去掉字符串中的回...
·如何使用C#获取IIS服务器版本...
·什么是泛型编程思想?及其简...
·c#子线程控制进度条的一个简...
热 门 文 章
·c#中收发邮件处理代码(POP3,...
·C#如何获取文件路径中的文件...
·什么是c#深拷贝与浅拷贝及其...
·C#中关于四舍五入函数的讨论...
·c#中的ArrayList属性祥解及其...
·C#语言实现创建、删除和移动...
·快速进行List排序的通用方法...
·C#对timer类的使用操作代码
·String.Split 方法使用及其代...
·如何在c#中去掉字符串中的回...
·用C#编写ActiveX控件代码实例
·C#语言实现从XML文件导出数据...
·C#如何从文本文件读取信息并...
·浅谈接口和抽象类的区别,加...
·c#子线程控制进度条的一个简...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .