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;
             } 
         }  
 
 
     } 
 } 

 

posted @ 2012-11-06 20:59  星火卓越  阅读(234)  评论(0编辑  收藏  举报