using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;

public class DES
    {
        
public static string Encrypt(string pToEncrypt, string sKey)
            {
                DESCryptoServiceProvider des 
= new DESCryptoServiceProvider(); 
               
                
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
                
//byte[]     inputByteArray=Encoding.Unicode.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);
                
//Write     the     byte     array     into     the     crypto     stream      
                
//(It     will     end     up     in     the     memory     stream)      
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                
//Get     the     data     back     from     the     memory     stream,     and     into     a     string      
                StringBuilder ret = new StringBuilder();
                
foreach (byte b in ms.ToArray())
                {
                    
//Format     as     hex      
                    ret.AppendFormat("{0:X2}", b);
                }
                
return ret.ToString();
            }

            
///   <summary>  
            
///  Decrypt the encrypted message to original,sKey must be same with one used in Encrypt method
            
///   </summary>  
            public static string Decrypt(string pToDecrypt, string sKey)
            {
                DESCryptoServiceProvider des 
= new DESCryptoServiceProvider();

                
//Put     the     input     string     into     the     byte     array      
                byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
                
for (int x = 0; x < pToDecrypt.Length / 2; x++)
                {
                    
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 22), 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);
                
//Flush     the     data     through     the     crypto     stream     into     the     memory     stream      
                cs.Write(inputByteArray, 0, inputByteArray.Length);

                    cs.FlushFinalBlock();

                
//Get     the     decrypted     data     back     from     the     memory     stream                      
                StringBuilder ret = new StringBuilder();

                
return System.Text.Encoding.Default.GetString(ms.ToArray());
            }
    }
posted on 2009-07-15 15:27  长风一剑  阅读(242)  评论(0编辑  收藏  举报