[转]C#可逆加密-Rijndael算法

转自:http://blog.csdn.net/wl076/archive/2007/07/05/1679163.aspx

using  System;
using  System.IO;
using  System.Security.Cryptography;
using  System.Text;

namespace  DataCrypto
{
    
/**/ ///   <summary>
    
///  DataCrypto 的摘要说明
    
///   </summary>
     public   class  SymmetricMethod
    {

        
private  SymmetricAlgorithm mobjCryptoService;
        
private   string  Key;
        
/**/ ///   <summary>
        
///  对称加密类的构造函数
        
///   </summary>
         public  SymmetricMethod()
        {
            mobjCryptoService 
=   new  RijndaelManaged();
            Key 
=   " lijianfufaicaixiaoke " ;
        }
        
/**/ ///   <summary>
        
///  获得密钥
        
///   </summary>
        
///   <returns> 密钥 </returns>
         private   byte [] GetLegalKey()
        {
            
string  sTemp  =  Key;
            mobjCryptoService.GenerateKey();
            
byte [] bytTemp  =  mobjCryptoService.Key;
            
int  KeyLength  =  bytTemp.Length;
            
if  (sTemp.Length  >  KeyLength)
                sTemp 
=  sTemp.Substring( 0 , KeyLength);
            
else   if  (sTemp.Length  <  KeyLength)
                sTemp 
=  sTemp.PadRight(KeyLength,  '   ' );
            
return  ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        
/**/ ///   <summary>
        
///  获得初始向量IV
        
///   </summary>
        
///   <returns> 初试向量IV </returns>
         private   byte [] GetLegalIV()
        {
            
string  sTemp  =   " caoxiaokeailijianfu " ;
            mobjCryptoService.GenerateIV();
            
byte [] bytTemp  =  mobjCryptoService.IV;
            
int  IVLength  =  bytTemp.Length;
            
if  (sTemp.Length  >  IVLength)
                sTemp 
=  sTemp.Substring( 0 , IVLength);
            
else   if  (sTemp.Length  <  IVLength)
                sTemp 
=  sTemp.PadRight(IVLength,  '   ' );
            
return  ASCIIEncoding.ASCII.GetBytes(sTemp);
        }
        
/**/ ///   <summary>
        
///  加密方法
        
///   </summary>
        
///   <param name="Source"> 待加密的串 </param>
        
///   <returns> 经过加密的串 </returns>
         public   string  Encrypto( string  Source)
        {
            
byte [] bytIn  =  UTF8Encoding.UTF8.GetBytes(Source);
            MemoryStream ms 
=   new  MemoryStream();
            mobjCryptoService.Key 
=  GetLegalKey();
            mobjCryptoService.IV 
=  GetLegalIV();
            ICryptoTransform encrypto 
=  mobjCryptoService.CreateEncryptor();
            CryptoStream cs 
=   new  CryptoStream(ms, encrypto, CryptoStreamMode.Write);
            cs.Write(bytIn, 
0 , bytIn.Length);
            cs.FlushFinalBlock();
            ms.Close();
            
byte [] bytOut  =  ms.ToArray();
            
return  Convert.ToBase64String(bytOut);
        }
        
/**/ ///   <summary>
        
///  解密方法
        
///   </summary>
        
///   <param name="Source"> 待解密的串 </param>
        
///   <returns> 经过解密的串 </returns>
         public   string  Decrypto( string  Source)
        {
            
byte [] bytIn  =  Convert.FromBase64String(Source);
            MemoryStream ms 
=   new  MemoryStream(bytIn,  0 , bytIn.Length);
            mobjCryptoService.Key 
=  GetLegalKey();
            mobjCryptoService.IV 
=  GetLegalIV();
            ICryptoTransform encrypto 
=  mobjCryptoService.CreateDecryptor();
            CryptoStream cs 
=   new  CryptoStream(ms, encrypto, CryptoStreamMode.Read);
            StreamReader sr 
=   new  StreamReader(cs);
            
return  sr.ReadToEnd();
        }
    }
}

protected   void  Page_Load( object  sender, EventArgs e)
    {
        DataCrypto.SymmetricMethod sm 
=   new  DataCrypto.SymmetricMethod();
        
string  a  =  sm.Encrypto( " asdf " ).ToString().Trim();
        
string  b  =  sm.Decrypto(a).ToString();
        Response.Write(a
+ " <br> " + b);
    }


转载于:https://www.cnblogs.com/yushiro/archive/2008/05/12/1193903.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值