C# 加密解密算法

1 、方法一 (不可逆加密)

 

 

public   string  EncryptPassword( string  PasswordString, string  PasswordFormat ) 
   

   
string   encryptPassword  =   null ;
   
if  (PasswordFormat = " SHA1 " )
   encryptPassword
= FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString 

,
" SHA1 " ); 
   }
 
   elseif (PasswordFormat
= " MD5 "
   
{ encryptPassword = FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString 

,
" MD5 " ); 
   }

return  encryptPassword ;
}

 

2 、方法二 (可逆加密)

 

    
public   interface  IBindesh
{
    
string  encode( string  str);
    
string  decode( string  str);
}


public   class  EncryptionDecryption : IBindesh
    
{
        
public   string  encode( string  str)
        
{
            
string  htext  =   ""

            
for  (  int  i  =   0 ; i  <  str.Length; i ++ )
            
{
                htext 
=  htext  +  ( char ) (str[i]  +   10   -   1   *   2 );
            }

            
return  htext;
        }


        
public   string  decode( string  str)
        
{
            
string  dtext  =   ""

            
for  (  int  i = 0 ; i  <  str.Length; i ++ )
            
{
                dtext 
=  dtext  +  ( char ) (str[i]  -   10   +   1 * 2 );
            }

            
return  dtext;
        }


 

3 、方法三 (可逆加密)

 

        
        
const   string  KEY_64  =   " VavicApp " ; // 注意了,是8個字符,64位

        
const   string  IV_64  =   " VavicApp "
public   string  Encode( string  data)
        
{
            
byte [] byKey  =  System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
            
byte [] byIV  =  System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

            DESCryptoServiceProvider cryptoProvider 
=   new  DESCryptoServiceProvider();
            
int  i  =  cryptoProvider.KeySize;
            MemoryStream ms 
=   new  MemoryStream();
            CryptoStream cst 
=   new  CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, 

byIV), CryptoStreamMode.Write);

            StreamWriter sw 
=   new  StreamWriter(cst);
            sw.Write(data);
            sw.Flush();
            cst.FlushFinalBlock();
            sw.Flush();
            
return  Convert.ToBase64String(ms.GetBuffer(),  0 , ( int )ms.Length);

        }


        
public   string  Decode( string  data)
        
{
            
byte [] byKey  =  System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
            
byte [] byIV  =  System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

            
byte [] byEnc;
            
try
            
{
                byEnc 
=  Convert.FromBase64String(data);
            }

            
catch
            
{
                
return   null ;
            }


            DESCryptoServiceProvider cryptoProvider 
=   new  DESCryptoServiceProvider();
            MemoryStream ms 
=   new  MemoryStream(byEnc);
            CryptoStream cst 
=   new  CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, 

byIV), CryptoStreamMode.Read);
            StreamReader sr 
=   new  StreamReader(cst);
            
return  sr.ReadToEnd();
        }

 

4 、MD5不可逆加密

    (32位加密)

public   string  GetMD5( string  s,  string  _input_charset)
    
{

        
/**/ /**/ /**/ ///   <summary>
        
///  與ASP兼容的MD5加密算法
        
///   </summary>

        MD5 md5 
=   new  MD5CryptoServiceProvider();
        
byte [] t  =  md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
        StringBuilder sb 
=   new  StringBuilder( 32 );
        
for  ( int  i  =   0 ; i  <  t.Length; i ++ )
        
{
            sb.Append(t[i].ToString(
" x " ).PadLeft( 2 , ' 0 '));
        }

        
return  sb.ToString();
    }

   (16位加密)

 

public   static   string  GetMd5Str( string  ConvertString)
    
{
        MD5CryptoServiceProvider md5 
=   new  MD5CryptoServiceProvider();
        
string  t2  =  

BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 
4 8 );
        t2 
=  t2.Replace( " - " "" );
        
return  t2;
    }
 
 

5 、加解文本文件

 

    
// 加密文件
     private   static   void  EncryptData(String inName, String outName,  byte [] desKey,  byte [] 

desIV)
    
{
        
// Create the file streams to handle the input and output files.
        FileStream fin  =   new  FileStream(inName, FileMode.Open, FileAccess.Read);
        FileStream fout 
=   new  FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
        fout.SetLength(
0 );

        
// Create variables to help with read and write.
         byte [] bin  =   new   byte [ 100 ];  // This is intermediate storage for the encryption.
         long  rdlen  =   0 ;               // This is the total number of bytes written.
         long  totlen  =  fin.Length;     // This is the total length of the input file.
         int  len;                      // This is the number of bytes to be written at a time.

        DES des 
=   new  DESCryptoServiceProvider();
        CryptoStream encStream 
=   new  CryptoStream(fout, des.CreateEncryptor(desKey, desIV), 

CryptoStreamMode.Write);

        
// Read from the input file, then encrypt and write to the output file.
         while  (rdlen  <  totlen)
        
{
            len 
=  fin.Read(bin,  0 100 );
            encStream.Write(bin, 
0 , len);
            rdlen 
=  rdlen  +  len;
        }


        encStream.Close();
        fout.Close();
        fin.Close();
    }


    
// 解密文件
     private   static   void  DecryptData(String inName, String outName,  byte [] desKey,  byte [] 

desIV)
    
{
        
// Create the file streams to handle the input and output files.
        FileStream fin  =   new  FileStream(inName, FileMode.Open, FileAccess.Read);
        FileStream fout 
=   new  FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
        fout.SetLength(
0 );

        
// Create variables to help with read and write.
         byte [] bin  =   new   byte [ 100 ];  // This is intermediate storage for the encryption.
         long  rdlen  =   0 ;               // This is the total number of bytes written.
         long  totlen  =  fin.Length;     // This is the total length of the input file.
         int  len;                      // This is the number of bytes to be written at a time.

        DES des 
=   new  DESCryptoServiceProvider();
        CryptoStream encStream 
=   new  CryptoStream(fout, des.CreateDecryptor(desKey, desIV), 

CryptoStreamMode.Write);

        
// Read from the input file, then encrypt and write to the output file.
         while  (rdlen  <  totlen)
        
{
            len 
=  fin.Read(bin,  0 100 );
            encStream.Write(bin, 
0 , len);
            rdlen 
=  rdlen  +  len;
        }


        encStream.Close();
        fout.Close();
        fin.Close();
    }

 

6

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

namespace  Component
{
    
public   class  Security
    
{
        
public  Security()
        

        
        }


        
// 默認密鑰向量
         private   static   byte [] Keys  =   0x12 0x34 0x56 0x78 0x90 0xAB 0xCD 0xEF  } ;
        
/**/ /**/ /**/ /**/ /**/ /**/ /**/ ///   <summary>
        
///  DES加密字符串
        
///   </summary>
        
///   <param name="encryptString"> 待加密的字符串 </param>
        
///   <param name="encryptKey"> 加密密鑰,要求爲8位 </param>
        
///   <returns> 加密成功返回加密後的字符串,失敗返回源串 </returns>
         public   static   string  EncryptDES( string  encryptString,  string  encryptKey)
        
{
            
try
            
{
                
byte [] rgbKey  =  Encoding.UTF8.GetBytes(encryptKey.Substring( 0 8 ));
                
byte [] rgbIV  =  Keys;
                
byte [] inputByteArray  =  Encoding.UTF8.GetBytes(encryptString);
                DESCryptoServiceProvider dCSP 
=   new  DESCryptoServiceProvider();
                MemoryStream mStream 
=   new  MemoryStream();
                CryptoStream cStream 
=   new  CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, 

rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 
0 , inputByteArray.Length);
                cStream.FlushFinalBlock();
                
return  Convert.ToBase64String(mStream.ToArray());
            }

            
catch
            
{
                
return  encryptString;
            }

        }


        
/**/ /**/ /**/ /**/ /**/ /**/ /**/ ///   <summary>
        
///  DES解密字符串
        
///   </summary>
        
///   <param name="decryptString"> 待解密的字符串 </param>
        
///   <param name="decryptKey"> 解密密鑰,要求爲8位,和加密密鑰相同 </param>
        
///   <returns> 解密成功返回解密後的字符串,失敗返源串 </returns>
         public   static   string  DecryptDES( string  decryptString,  string  decryptKey)
        
{
            
try
            
{
                
byte [] rgbKey  =  Encoding.UTF8.GetBytes(decryptKey);
                
byte [] rgbIV  =  Keys;
                
byte [] inputByteArray  =  Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider DCSP 
=   new  DESCryptoServiceProvider();
                MemoryStream mStream 
=   new  MemoryStream();
                CryptoStream cStream 
=   new  CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, 

rgbIV), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 
0 , inputByteArray.Length);
                cStream.FlushFinalBlock();
                
return  Encoding.UTF8.GetString(mStream.ToArray());
            }

            
catch
            
{
                
return  decryptString;
            }

        }
 


    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章