C#实现Des加密和解密

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

namespace Common
{
    
/// <summary>
    
/// Summary description for Security.
    
/// </summary>

    public class Security
    
{
        
public Security()
        
{
            
//
            
// TODO: Add constructor logic here
            
//
        }


        
/// <summary>
        
/// 加密
        
/// </summary>
        
/// <param name="pToEncrypt">要加密的字符串</param>
        
/// <param name="sKey">密匙</param>
        
/// <returns>加密后字符串</returns>

        public static string  Encrypt(string pToEncrypt,string sKey)  
        
{  
            DESCryptoServiceProvider  des  
=  new  DESCryptoServiceProvider();  
            
byte[]  inputByteArray  =  Encoding.Default.GetBytes(pToEncrypt);
            des.Key  
=  ASCIIEncoding.ASCII.GetBytes(sKey);  
            des.IV  
=  ASCIIEncoding.ASCII.GetBytes(sKey);  
            MemoryStream  ms  
=  new  MemoryStream();  
            CryptoStream  cs  
=  new  CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);  
            cs.Write(inputByteArray,
0,inputByteArray.Length);  
            cs.FlushFinalBlock();  
            StringBuilder  ret  
=  new  StringBuilder();  
            
foreach(byte  b  in  ms.ToArray())  
            
{  
                ret.AppendFormat(
"{0:X2}",  b);  
            }
  
            ret.ToString();  
            
return  ret.ToString();  
        }
  

        
/// <summary>
        
/// 解密
        
/// </summary>
        
/// <param name="pToDecrypt">要解密的字符串</param>
        
/// <param name="sKey">密匙</param>
        
/// <returns>解密后字符串</returns>

        public static string  Decrypt(string pToDecrypt,string sKey)  
        
{  
            DESCryptoServiceProvider  des  
=  new  DESCryptoServiceProvider(); 
            
byte[]  inputByteArray  =  new  byte[pToDecrypt.Length  /  2];  
            
for(int  x  =  0;  x  <  pToDecrypt.Length  /  2;  x++)  
            
{  
                
int  i  =  (Convert.ToInt32(pToDecrypt.Substring(x* 2,2),16));  
                inputByteArray[x]  
=  (byte)i;  
            }
   
            des.Key  
=  ASCIIEncoding.ASCII.GetBytes(sKey);  
            des.IV  
=  ASCIIEncoding.ASCII.GetBytes(sKey);  
            MemoryStream  ms  
=  new  MemoryStream();  
            CryptoStream  cs  
=  new  CryptoStream(ms,  des.CreateDecryptor(),CryptoStreamMode.Write); 
            cs.Write(inputByteArray,  
0,  inputByteArray.Length);  
            cs.FlushFinalBlock();
            StringBuilder  ret  
=  new  StringBuilder();               
            
return  System.Text.Encoding.Default.GetString(ms.ToArray());  
        }

    }

}


posted on 2008-07-05 19:15  王丹小筑  阅读(390)  评论(0)    收藏  举报

导航