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

提供一个基于.NETSymmetricAlgorithm类的、带私钥的加密/解密算法的包装类。使用方法:

symmcryptode=newSymmCrypto(SymmCrypto.SymmProvEnum.DES);
Response.Write(x.Decrypting(de.Encrypting("ok","yyy"),"yyy"));

类的实现c#编码

usingSystem;
usingSystem.Security.Cryptography;
usingSystem.IO;
usingSystem.Text;

namespaceeMeng
{
///<summary>
///SymmCrypto的摘要说明。
///SymmCrypto类实现.NET框架下的加密和解密服务。
///原作者:FrankFang:fangfrank@hotmail.com
///</summary>
publicclassSymmCrypto
{
publicenumSymmProvEnum:int
{
DES,RC2,Rijndael
}

privateSymmetricAlgorithmmobjCryptoService;

///<remarks>
///使用.NetSymmetricAlgorithm类的构造器.
///</remarks>
publicSymmCrypto(SymmProvEnumNetSelected)
{
switch(NetSelected)
{
caseSymmProvEnum.DES:
mobjCryptoService=newDESCryptoServiceProvider();
break;
caseSymmProvEnum.RC2:
mobjCryptoService=newRC2CryptoServiceProvider();
break;
caseSymmProvEnum.Rijndael:
mobjCryptoService=newRijndaelManaged();
break;
}
}

///<remarks>
///使用自定义SymmetricAlgorithm类的构造器.
///</remarks>
publicSymmCrypto(SymmetricAlgorithmServiceProvider)
{
mobjCryptoService=ServiceProvider;
}

///<remarks>
///Dependingonthelegalkeysizelimitationsof
///aspecificCryptoServiceproviderandlengthof
///theprivatekeyprovided,paddingthesecretkey
///withspacecharactertomeetthelegalsizeofthealgorithm.
///</remarks>
privatebyte[]GetLegalKey(stringKey)
{
stringsTemp;
if(mobjCryptoService.LegalKeySizes.Length>0)
{
intlessSize=0,moreSize=mobjCryptoService.LegalKeySizes[0].MinSize;
//keysizesareinbits
while(Key.Length*8>moreSize)
{
lessSize=moreSize;
moreSize+=mobjCryptoService.LegalKeySizes[0].SkipSize;
}
sTemp=Key.PadRight(moreSize/8,'');
}
else
sTemp=Key;

//convertthesecretkeytobytearray
returnASCIIEncoding.ASCII.GetBytes(sTemp);
}

publicstringEncrypting(stringSource,stringKey)
{
byte[]bytIn=System.Text.ASCIIEncoding.ASCII.GetBytes(Source);
//createaMemoryStreamsothattheprocesscanbedonewithoutI/Ofiles
System.IO.MemoryStreamms=newSystem.IO.MemoryStream();

byte[]bytKey=GetLegalKey(Key);

//settheprivatekey
mobjCryptoService.Key=bytKey;
mobjCryptoService.IV=bytKey;

//createanEncryptorfromtheProviderServiceinstance
ICryptoTransformencrypto=mobjCryptoService.CreateEncryptor();

//createCryptoStreamthattransformsastreamusingtheencryption
CryptoStreamcs=newCryptoStream(ms,encrypto,CryptoStreamMode.Write);

//writeoutencryptedcontentintoMemoryStream
cs.Write(bytIn,0,bytIn.Length);
cs.FlushFinalBlock();

//gettheoutputandtrimthe'\0'bytes
byte[]bytOut=ms.GetBuffer();
inti=0;
for(i=0;i<bytOut.Length;i++)
if(bytOut[i]==0)
break;

//convertintoBase64sothattheresultcanbeusedinxml
returnSystem.Convert.ToBase64String(bytOut,0,i);
}

publicstringDecrypting(stringSource,stringKey)
{
//convertfromBase64tobinary
byte[]bytIn=System.Convert.FromBase64String(Source);
//createaMemoryStreamwiththeinput
System.IO.MemoryStreamms=newSystem.IO.MemoryStream(bytIn,0,bytIn.Length);

byte[]bytKey=GetLegalKey(Key);

//settheprivatekey
mobjCryptoService.Key=bytKey;
mobjCryptoService.IV=bytKey;

//createaDecryptorfromtheProviderServiceinstance
ICryptoTransformencrypto=mobjCryptoService.CreateDecryptor();

//createCryptoStreamthattransformsastreamusingthedecryption
CryptoStreamcs=newCryptoStream(ms,encrypto,CryptoStreamMode.Read);

//readouttheresultfromtheCryptoStream
System.IO.StreamReadersr=newSystem.IO.StreamReader(cs);
returnsr.ReadToEnd();
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值