基于.NET的加密/解密算法

原创 2004年08月30日 20:02:00

提供一个基于.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 { /// /// SymmCrypto 的摘要说明。 /// SymmCrypto类实现.NET框架下的加密和解密服务。 /// 原作者: Frank Fang : fangfrank@hotmail.com /// public class SymmCrypto { public enum SymmProvEnum : int { DES, RC2, Rijndael } private SymmetricAlgorithm mobjCryptoService; /// /// 使用.Net SymmetricAlgorithm 类的构造器. /// 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; } } /// /// 使用自定义SymmetricAlgorithm类的构造器. /// public SymmCrypto(SymmetricAlgorithm ServiceProvider) { mobjCryptoService = ServiceProvider; } /// /// 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. /// 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加密解密学习总结

.NET中的DES加密解密 http://blog.csdn.net/pan_junbiao/article/details/7032700   System.Security.Cryptograp...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年06月21日 19:11
  • 1071

.NET 加密算法封装大全

各位看官,自己把Default的一些密码写上。#region 文件注释/************************************************************** *...
  • Linux7985
  • Linux7985
  • 2017年03月24日 15:09
  • 888

.net常用加密解密方法

http://www.cnblogs.com/qinweilong/archive/2010/06/30/1768535.html .net常用加密解密方法 UnicodeEncodin...
  • DJ2008
  • DJ2008
  • 2015年10月23日 09:54
  • 1885

.NET使用RSA加密解密

知耻近乎勇。——孔丘PassWordHelper.cs代码:using System; using System.IO; using System.Text; using System.Globali...
  • WuLex
  • WuLex
  • 2016年12月24日 10:13
  • 3030

C# 使用DES加密,解密字符串

1 DES类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
  • taoerit
  • taoerit
  • 2016年07月14日 09:40
  • 5434

C#.net实现密码加密算法

//SHA-1算法 string password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigF...
  • hwt0101
  • hwt0101
  • 2015年05月25日 17:01
  • 2865

AES加密解密(互通.NET和JAVA)

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te...
  • q269399361
  • q269399361
  • 2014年06月20日 17:21
  • 1773

VB.NET 的 DES 加密与解密(转载于nofort博客)

MD5和SHA的加密方式都是单向的,就算是我写的程序用户的密码用这两种方式保存后,我对着看也不知道他们的密码是什么,这用在保存密码上是不错的,但如果是一些需要能将密文还原的应用来说就不合适了,所以接下...
  • lpwmm
  • lpwmm
  • 2016年03月06日 23:19
  • 2242

java与.net des加解密 方法解析

java的des的加密和解密以及c#的加密和解密的方法: DES加密 DES是一种对称加密(Data Encryption Standard)算法 ,两个关键点,第一个是加密算法,第二个是数据补位。 ...
  • paolei
  • paolei
  • 2015年12月16日 14:26
  • 2067

C#实现RSA加密与解密、签名与认证

一、RSA简介 RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响...
  • u010678947
  • u010678947
  • 2015年09月22日 13:25
  • 15468
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于.NET的加密/解密算法
举报原因:
原因补充:

(最多只允许输入30个字)