DESCryptoServiceProvider加密解密

代码
using  ...System; 
using  System.IO; 
using  System.Security.Cryptography; 
using  System.Text;  
 
namespace  Clib 

    
///   <!--Security類別-->  
     /**/ ///   <summary>  
    
///  Security類別 - design By Phoenix 2008 - 
    
///   </summary>  
     public   class  Security 
    { 
        
private   string  _Key; 
        
private   string  _IV; 
 
        
/**/ ///   <summary>  
        
///  加密金鑰(8個英文字) 
        
///   </summary>  
         public   string  Key 
        { 
            
set  
            { 
                _Key 
=  value.Length  ==   8   ?  value :  " PhoenixK "
            } 
        } 
        
/**/ ///   <summary>  
        
///  初始化向量(8個英文字) 
        
///   </summary>  
         public   string  IV 
        { 
            
set  
            { 
                _IV 
=  value.Length  ==   8   ?  value :  " PhoenixI "
            } 
        } 
 
        
/**/ ///   <summary>  
        
///  初始化 Clib.Security 類別的新執行個體 
        
///   </summary>  
         public  Security() 
        { 
            _Key 
=   " PhoenixK "
            _IV 
=   " PhoenixI "
        } 
 
        
/**/ ///   <summary>  
        
///  初始化 Clib.Security 類別的新執行個體 
        
///   </summary>  
        
///   <param name="newKey"> 加密金鑰 </param>  
        
///   <param name="newIV"> 初始化向量 </param>  
         public  Security( string  newKey, string  newIV) 
        { 
            
this .Key  =  newKey; 
            
this .IV  =  newIV; 
        } 
 
        
///   <!--加密字串-->  
         /**/ ///   <summary>  
        
///  加密字串 - design By Phoenix 2008 - 
        
///   </summary>  
        
///   <param name="value"> 加密的字串 </param>  
        
///   <returns> 加密過後的字串 </returns>  
         public   string  Encrypt( string  value) 
        { 
            
return  Encrypt(value, _Key,_IV); 
        } 
 
        
///   <!--解密字串-->  
         /**/ ///   <summary>  
        
///  解密字串 - design By Phoenix 2008 - 
        
///   </summary>  
        
///   <param name="value"> 解密的字串 </param>  
        
///   <returns> 解密過後的字串 </returns>  
         public   string  Decrypt( string  value) 
        { 
            
return  Decrypt(value, _Key,_IV); 
        } 
 
        
///   <!--DEC 加密法 -->  
         /**/ ///   <summary>  
        
///  DEC 加密法 - design By Phoenix 2008 - 
        
///   </summary>  
        
///   <param name="pToEncrypt"> 加密的字串 </param>  
        
///   <param name="sKey"> 加密金鑰 </param>  
        
///   <param name="sIV"> 初始化向量 </param>  
        
///   <returns></returns>  
         private   string  Encrypt( string  pToEncrypt,  string  sKey, string  sIV) 
        { 
            StringBuilder ret 
=   new  StringBuilder(); 
            
using  (DESCryptoServiceProvider des  =   new  DESCryptoServiceProvider()) 
            { 
                
// 將字元轉換為Byte 
                 byte [] inputByteArray  =  Encoding.Default.GetBytes(pToEncrypt); 
                
// 設定加密金鑰(轉為Byte) 
                des.Key  =  ASCIIEncoding.ASCII.GetBytes(sKey); 
                
// 設定初始化向量(轉為Byte) 
                des.IV  =  ASCIIEncoding.ASCII.GetBytes(sIV); 
 
                
using  (MemoryStream ms  =   new  MemoryStream()) 
                { 
                    
using  (CryptoStream cs  =   new  CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) 
                    { 
                        cs.Write(inputByteArray, 
0 , inputByteArray.Length); 
                        cs.FlushFinalBlock(); 
                    } 
                    
// 輸出資料 
                     foreach  ( byte  b  in  ms.ToArray()) 
                        ret.AppendFormat(
" ...{0:X2} " , b); 
                } 
            } 
            
// 回傳 
             return  ret.ToString(); 
        } 
 
        
///   <!--DEC 解密法-->  
         /**/ ///   <summary>  
        
///  DEC 解密法 - design By Phoenix 2008 - 
        
///   </summary>  
        
///   <param name="pToDecrypt"> 解密的字串 </param>  
        
///   <param name="sKey"> 加密金鑰 </param>  
        
///   <param name="sIV"> 初始化向量 </param>  
        
///   <returns></returns>  
         private   string  Decrypt( string  pToDecrypt,  string  sKey,  string  sIV) 
        { 
            
using  (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; 
                } 
                
// 設定加密金鑰(轉為Byte) 
                des.Key  =  ASCIIEncoding.ASCII.GetBytes(sKey); 
                
// 設定初始化向量(轉為Byte) 
                des.IV  =  ASCIIEncoding.ASCII.GetBytes(sIV); 
                
using  (MemoryStream ms  =   new  MemoryStream()) 
                { 
                    
using  (CryptoStream cs  =   new  CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) 
                    { 
                        
// 例外處理 
                         try  
                        { 
                            cs.Write(inputByteArray, 
0 , inputByteArray.Length); 
                            cs.FlushFinalBlock(); 
                            
// 輸出資料 
                             return  System.Text.Encoding.Default.GetString(ms.ToArray()); 
                        } 
                        
catch  (CryptographicException) 
                        { 
                            
// 若金鑰或向量錯誤,傳回N/A 
                             return   " N/A "
                        } 
                    } 
                } 
            } 
        } 
 
        
///   <!--驗證加密字串-->  
         /**/ ///   <summary>  
        
///  驗證加密字串 - design By Phoenix 2008 - 
        
///   </summary>  
        
///   <param name="EnString"> 加密後的字串 </param>  
        
///   <param name="FoString"> 加密前的字串 </param>  
        
///   <returns> 是/否 </returns>  
         public   bool  ValidateString( string  EnString,  string  FoString) 
        { 
            
// 呼叫Decrypt解密 
            
// 判斷是否相符 
            
// 回傳結果 
             return  Decrypt(EnString, _Key,_IV)  ==  FoString.ToString()  ?   true  :  false
        } 
    } 
}

 

你可能感兴趣的:(Provider)