C#几种加密算法,包括MD5

 
MD5算法:
using  System;
using  System.Text;
namespace  BaseStationPDA
{
    
/// <summary>  
    
///  Summary description for MD5. 
    
///   </summary>  
     public   class  MD5 
    {
        
const  
        
int  BITS_TO_A_BYTE  =   8 ;
        
const  
        
int  BYTES_TO_A_WORD  =   4 ;
        
const  
        
int  BITS_TO_A_WORD  =   32 ;
        
        
private   static   long [] m_lOnBits  =   new   long [ 30   +   1 ];
        
        
private   static   long [] m_l2Power  =   new   long [ 30   +   1 ];
        
        
private   static   long  LShift(  long  lValue,  long  iShiftBits )  
        {
            
long  LShift  =   0 ;
            
if  ( iShiftBits  ==   0  )
            {
                LShift 
=  lValue;
                
return  LShift;
            }
            
else
            {
                
if (iShiftBits  ==   31  )
                {
                    
if  ( Convert.ToBoolean( lValue  &   1  ) )
                    {
                        LShift 
=   0x80000000 ;
                    }
                    
else
                    {
                        LShift 
=   0 ;
                    }
                    
return  LShift;
                }
                
else
                {
                    
if (iShiftBits  <   0   ||  iShiftBits  >   31  )
                    {
                        
//  Err.Raise 6;
                    }
                }
            }
            
if  ( Convert.ToBoolean( ( lValue  &  m_l2Power[ 31   -  iShiftBits] ) ) )
            {
                LShift 
=  ( ( lValue  &  m_lOnBits[ 31   -  ( iShiftBits  +   1  )] )  *  m_l2Power[iShiftBits] )  |   0x80000000 ;
            }
            
else
            {
                LShift 
=  ( ( lValue  &  m_lOnBits[ 31   -  iShiftBits] )  *  m_l2Power[iShiftBits] );
            }
            
return  LShift;
        }
        
        
private   static   long  RShift(  long  lValue,  long  iShiftBits )  
        {
            
long  RShift  =   0 ;
            
if  ( iShiftBits  ==   0  )
            {
                RShift 
=  lValue;
                
return  RShift;
            }
            
else
            {
                
if (iShiftBits  ==   31  )
                {
                    
if  ( Convert.ToBoolean( lValue  &   0x80000000  ) )
                    {
                        RShift 
=   1 ;
                    }
                    
else
                    {
                        RShift 
=   0 ;
                    }
                    
return  RShift;
                }
                
else
                {
                    
if (iShiftBits  <   0   ||  iShiftBits  >   31  )
                    {
                        
//  Err.Raise 6;
                    }
                }
            }
            RShift 
=  ( lValue  &   0x7FFFFFFE  )  /  m_l2Power[iShiftBits];
            
if  ( Convert.ToBoolean( ( lValue  &   0x80000000  ) ) )
            {
                RShift 
=  ( RShift  |  (  0x40000000   /  m_l2Power[iShiftBits  -   1 ] ) );
            }
            
return  RShift;
        }
        
        
private   static   long  RotateLeft(  long  lValue,  long  iShiftBits )  
        {
            
long  RotateLeft  =   0 ;
            RotateLeft 
=  LShift( lValue, iShiftBits )  |  RShift( lValue, (  32   -  iShiftBits ) );
            
return  RotateLeft;
        }
        
        
private   static   long  AddUnsigned(  long  lX,  long  lY )  
        {
            
long  AddUnsigned  =   0 ;
            
long  lX4  =   0 ;
            
long  lY4  =   0 ;
            
long  lX8  =   0 ;
            
long  lY8  =   0 ;
            
long  lResult  =   0 ;
            lX8 
=  lX  &   0x80000000 ;
            lY8 
=  lY  &   0x80000000 ;
            lX4 
=  lX  &   0x40000000 ;
            lY4 
=  lY  &   0x40000000 ;
            lResult 
=  ( lX  &   0x3FFFFFFF  )  +  ( lY  &   0x3FFFFFFF  );
            
if  ( Convert.ToBoolean( lX4  &  lY4 ) )
            {
                lResult 
=  lResult  ^   0x80000000   ^  lX8  ^  lY8;
            }
            
else   if (Convert.ToBoolean( lX4  |  lY4 ) )
            {
                
if  ( Convert.ToBoolean( lResult  &   0x40000000  ) )
                {
                    lResult 
=  lResult  ^   0xC0000000   ^  lX8  ^  lY8;
                }
                
else
                {
                    lResult 
=  lResult  ^   0x40000000   ^  lX8  ^  lY8;
                }
            }
            
else
            {
                lResult 
=  lResult  ^  lX8  ^  lY8;
            }
            AddUnsigned 
=  lResult;
            
return  AddUnsigned;
        }
        
        
private   static   long  md5_F(  long  x,  long  y,  long  z )  
        {
            
long  md5_F  =   0 ;
            md5_F 
=  ( x  &  y )  |  ( ( ~ x )  &  z );
            
return  md5_F;
        }
        
        
private   static   long  md5_G(  long  x,  long  y,  long  z )  
        {
            
long  md5_G  =   0 ;
            md5_G 
=  ( x  &  z )  |  ( y  &  ( ~ z ) );
            
return  md5_G;
        }
        
        
private   static   long  md5_H(  long  x,  long  y,  long  z )  
        {
            
long  md5_H  =   0 ;
            md5_H 
=  ( x  ^  y  ^  z );
            
return  md5_H;
        }
        
        
private   static   long  md5_I(  long  x,  long  y,  long  z )  
        {
            
long  md5_I  =   0 ;
            md5_I 
=  ( y  ^  ( x  |  (  ~ z ) ) );
            
return  md5_I;
        }
        
        
private   static   void  md5_FF(  ref   long  a,  long  b,  long  c,  long  d,  long  x,  long  s,  long  ac )  
        {
            a 
=  AddUnsigned( a, AddUnsigned( AddUnsigned( md5_F( b, c, d ), x ), ac ) );
            a 
=  RotateLeft( a, s );
            a 
=  AddUnsigned( a, b );
        }
        
        
private   static   void  md5_GG(  ref   long  a,  long  b,  long  c,  long  d,  long  x,  long  s,  long  ac )  
        {
            a 
=  AddUnsigned( a, AddUnsigned( AddUnsigned( md5_G( b, c, d ), x ), ac ) );
            a 
=  RotateLeft( a, s );
            a 
=  AddUnsigned( a, b );
        }
        
        
private   static   void  md5_HH(  ref   long  a,  long  b,  long  c,  long  d,  long  x,  long  s,  long  ac )  
        {
            a 
=  AddUnsigned( a, AddUnsigned( AddUnsigned( md5_H( b, c, d ), x ), ac ) );
            a 
=  RotateLeft( a, s );
            a 
=  AddUnsigned( a, b );
        }
        
        
private   static   void  md5_II(  ref   long  a,  long  b,  long  c,  long  d,  long  x,  long  s,  long  ac )  
        {
            a 
=  AddUnsigned( a, AddUnsigned( AddUnsigned( md5_I( b, c, d ), x ), ac ) );
            a 
=  RotateLeft( a, s );
            a 
=  AddUnsigned( a, b );
        }
        
        
private   static   long [] ConvertToWordArray(  string  sMessage )  
        {
            
long [] ConvertToWordArray  =   null ;
            
            
int  lMessageLength  =   0 ;
            
            
int  lNumberOfWords  =   0 ;
            
long [] lWordArray  =   null ;
            
            
int  lBytePosition  =   0 ;
            
            
int  lByteCount  =   0 ;
            
            
int  lWordCount  =   0 ;
            
const  
            
int  MODULUS_BITS  =   512 ;
            
const  
            
int  CONGRUENT_BITS  =   448 ;
            lMessageLength 
=  sMessage.Length;
            lNumberOfWords 
=  ( ( ( lMessageLength  +  ( ( MODULUS_BITS  -  CONGRUENT_BITS )  /  BITS_TO_A_BYTE ) )  /  ( MODULUS_BITS  /  BITS_TO_A_BYTE ) )  +   1  )  *  ( MODULUS_BITS  /  BITS_TO_A_WORD );
            lWordArray 
=   new   long [lNumberOfWords];
            lBytePosition 
=   0 ;
            lByteCount 
=   0 ;
            
while ( lByteCount  <  lMessageLength )
            {
                lWordCount 
=  lByteCount  /  BYTES_TO_A_WORD;
                lBytePosition 
=  ( lByteCount  %  BYTES_TO_A_WORD )  *  BITS_TO_A_BYTE;
                lWordArray[lWordCount] 
=  lWordArray[lWordCount]  |  LShift( Convert.ToByte( sMessage.Sub
                
string ( lByteCount,  1  ).ToCharArray( )[ 0 ] ), lBytePosition );
                lByteCount 
=  lByteCount  +   1 ;
            }
            lWordCount 
=  lByteCount  /  BYTES_TO_A_WORD;
            lBytePosition 
=  ( lByteCount  %  BYTES_TO_A_WORD )  *  BITS_TO_A_BYTE;
            lWordArray[lWordCount] 
=  lWordArray[lWordCount]  |  LShift(  0x80 , lBytePosition );
            lWordArray[lNumberOfWords 
-   2 =  LShift( lMessageLength,  3  );
            lWordArray[lNumberOfWords 
-   1 =  RShift( lMessageLength,  29  );
            ConvertToWordArray 
=  lWordArray;
            
return  ConvertToWordArray;
        }
        
        
private   static  
        
string  WordToHex(  long  lValue )  
        {
            
string  WordToHex  =   "" ;
            
long  lByte  =   0 ;
            
            
int  lCount  =   0 ;
            
for ( lCount  =   0 ;
            lCount 
<=   3 ;
            lCount
++  )
            {
                lByte 
=  RShift( lValue, lCount  *  BITS_TO_A_BYTE )  &  m_lOnBits[BITS_TO_A_BYTE  -   1 ];
                WordToHex 
=  WordToHex  +  ( (  " 0 "   +  ToHex( lByte ) ).Sub
                
string ( (  " 0 "   +  ToHex( lByte ) ).Length  -   2  ) );
            }
            
return  WordToHex;
        }
        
        
private   static  
        
string  ToHex(  long  dec )  
        {
            
string  strhex  =   "" ;
            
while ( dec  >   0  )
            {
                strhex 
=  tohex( dec  %   16  )  +  strhex;
                dec 
=  dec  /   16 ;
            }
            
return  strhex;
        }
        
        
private   static  
        
string  tohex(  long  hex )  
        {
            
string  strhex  =   "" ;
            
switch ( hex )
            {
                
case   10 : strhex  =   " a " ;
                
break ;
                
case   11 : strhex  =   " b " ;
                
break ;
                
case   12 : strhex  =   " c " ;
                
break ;
                
case   13 : strhex  =   " d " ;
                
break ;
                
case   14 : strhex  =   " e " ;
                
break ;
                
case   15 : strhex  =   " f " ;
                
break ;
                
default  : strhex  =  hex.ToString( );
                
break ;
            }
            
return  strhex;
        }
        
        
public   static  
        
string  Encrypt(  string  sMessage, 
        
int  stype )  
        {
            
string  MD5  =   "" ;
            
for int  i = 0 ;
            i
<= 30 ;
            i
++  )
            {
                m_lOnBits[i] 
=  Convert.ToInt64( Math.Pow(  2 , i + 1  )  - 1  );
                m_l2Power[i] 
=  Convert.ToInt64( Math.Pow(  2 , i ) );
            }
            
long [] x  =   null ;
            
            
int  k  =   0 ;
            
long  AA  =   0 ;
            
long  BB  =   0 ;
            
long  CC  =   0 ;
            
long  DD  =   0 ;
            
long  a  =   0 ;
            
long  b  =   0 ;
            
long  c  =   0 ;
            
long  d  =   0 ;
            
const  
            
int  S11  =   7 ;
            
const  
            
int  S12  =   12 ;
            
const  
            
int  S13  =   17 ;
            
const  
            
int  S14  =   22 ;
            
const  
            
int  S21  =   5 ;
            
const  
            
int  S22  =   9 ;
            
const  
            
int  S23  =   14 ;
            
const  
            
int  S24  =   20 ;
            
const  
            
int  S31  =   4 ;
            
const  
            
int  S32  =   11 ;
            
const  
            
int  S33  =   16 ;
            
const  
            
int  S34  =   23 ;
            
const  
            
int  S41  =   6 ;
            
const  
            
int  S42  =   10 ;
            
const  
            
int  S43  =   15 ;
            
const  
            
int  S44  =   21 ;
            x 
=  ConvertToWordArray( sMessage );
            a 
=   0x67452301 ;
            b 
=   0xEFCDAB89 ;
            c 
=   0x98BADCFE ;
            d 
=   0x10325476 ;
            
for ( k  =   0 ;
            k 
<  x.Length;
            k 
+=   16  )
            {
                AA 
=  a;
                BB 
=  b;
                CC 
=  c;
                DD 
=  d;
                md5_FF( 
ref  a, b, c, d, x[k  +   0 ], S11,  0xD76AA478  );
                md5_FF( 
ref  d, a, b, c, x[k  +   1 ], S12,  0xE8C7B756  );
                md5_FF( 
ref  c, d, a, b, x[k  +   2 ], S13,  0x242070DB  );
                md5_FF( 
ref  b, c, d, a, x[k  +   3 ], S14,  0xC1BDCEEE  );
                md5_FF( 
ref  a, b, c, d, x[k  +   4 ], S11,  0xF57C0FAF  );
                md5_FF( 
ref  d, a, b, c, x[k  +   5 ], S12,  0x4787C62A  );
                md5_FF( 
ref  c, d, a, b, x[k  +   6 ], S13,  0xA8304613  );
                md5_FF( 
ref  b, c, d, a, x[k  +   7 ], S14,  0xFD469501  );
                md5_FF( 
ref  a, b, c, d, x[k  +   8 ], S11,  0x698098D8  );
                md5_FF( 
ref  d, a, b, c, x[k  +   9 ], S12,  0x8B44F7AF  );
                md5_FF( 
ref  c, d, a, b, x[k  +   10 ], S13,  0xFFFF5BB1  );
                md5_FF( 
ref  b, c, d, a, x[k  +   11 ], S14,  0x895CD7BE  );
                md5_FF( 
ref  a, b, c, d, x[k  +   12 ], S11,  0x6B901122  );
                md5_FF( 
ref  d, a, b, c, x[k  +   13 ], S12,  0xFD987193  );
                md5_FF( 
ref  c, d, a, b, x[k  +   14 ], S13,  0xA679438E  );
                md5_FF( 
ref  b, c, d, a, x[k  +   15 ], S14,  0x49B40821  );
                md5_GG( 
ref  a, b, c, d, x[k  +   1 ], S21,  0xF61E2562  );
                md5_GG( 
ref  d, a, b, c, x[k  +   6 ], S22,  0xC040B340  );
                md5_GG( 
ref  c, d, a, b, x[k  +   11 ], S23,  0x265E5A51  );
                md5_GG( 
ref  b, c, d, a, x[k  +   0 ], S24,  0xE9B6C7AA  );
                md5_GG( 
ref  a, b, c, d, x[k  +   5 ], S21,  0xD62F105D  );
                md5_GG( 
ref  d, a, b, c, x[k  +   10 ], S22,  0x2441453  );
                md5_GG( 
ref  c, d, a, b, x[k  +   15 ], S23,  0xD8A1E681  );
                md5_GG( 
ref  b, c, d, a, x[k  +   4 ], S24,  0xE7D3FBC8  );
                md5_GG( 
ref  a, b, c, d, x[k  +   9 ], S21,  0x21E1CDE6  );
                md5_GG( 
ref  d, a, b, c, x[k  +   14 ], S22,  0xC33707D6  );
                md5_GG( 
ref  c, d, a, b, x[k  +   3 ], S23,  0xF4D50D87  );
                md5_GG( 
ref  b, c, d, a, x[k  +   8 ], S24,  0x455A14ED  );
                md5_GG( 
ref  a, b, c, d, x[k  +   13 ], S21,  0xA9E3E905  );
                md5_GG( 
ref  d, a, b, c, x[k  +   2 ], S22,  0xFCEFA3F8  );
                md5_GG( 
ref  c, d, a, b, x[k  +   7 ], S23,  0x676F02D9  );
                md5_GG( 
ref  b, c, d, a, x[k  +   12 ], S24,  0x8D2A4C8A  );
                md5_HH( 
ref  a, b, c, d, x[k  +   5 ], S31,  0xFFFA3942  );
                md5_HH( 
ref  d, a, b, c, x[k  +   8 ], S32,  0x8771F681  );
                md5_HH( 
ref  c, d, a, b, x[k  +   11 ], S33,  0x6D9D6122  );
                md5_HH( 
ref  b, c, d, a, x[k  +   14 ], S34,  0xFDE5380C  );
                md5_HH( 
ref  a, b, c, d, x[k  +   1 ], S31,  0xA4BEEA44  );
                md5_HH( 
ref  d, a, b, c, x[k  +   4 ], S32,  0x4BDECFA9  );
                md5_HH( 
ref  c, d, a, b, x[k  +   7 ], S33,  0xF6BB4B60  );
                md5_HH( 
ref  b, c, d, a, x[k  +   10 ], S34,  0xBEBFBC70  );
                md5_HH( 
ref  a, b, c, d, x[k  +   13 ], S31,  0x289B7EC6  );
                md5_HH( 
ref  d, a, b, c, x[k  +   0 ], S32,  0xEAA127FA  );
                md5_HH( 
ref  c, d, a, b, x[k  +   3 ], S33,  0xD4EF3085  );
                md5_HH( 
ref  b, c, d, a, x[k  +   6 ], S34,  0x4881D05  );
                md5_HH( 
ref  a, b, c, d, x[k  +   9 ], S31,  0xD9D4D039  );
                md5_HH( 
ref  d, a, b, c, x[k  +   12 ], S32,  0xE6DB99E5  );
                md5_HH( 
ref  c, d, a, b, x[k  +   15 ], S33,  0x1FA27CF8  );
                md5_HH( 
ref  b, c, d, a, x[k  +   2 ], S34,  0xC4AC5665  );
                md5_II( 
ref  a, b, c, d, x[k  +   0 ], S41,  0xF4292244  );
                md5_II( 
ref  d, a, b, c, x[k  +   7 ], S42,  0x432AFF97  );
                md5_II( 
ref  c, d, a, b, x[k  +   14 ], S43,  0xAB9423A7  );
                md5_II( 
ref  b, c, d, a, x[k  +   5 ], S44,  0xFC93A039  );
                md5_II( 
ref  a, b, c, d, x[k  +   12 ], S41,  0x655B59C3  );
                md5_II( 
ref  d, a, b, c, x[k  +   3 ], S42,  0x8F0CCC92  );
                md5_II( 
ref  c, d, a, b, x[k  +   10 ], S43,  0xFFEFF47D  );
                md5_II( 
ref  b, c, d, a, x[k  +   1 ], S44,  0x85845DD1  );
                md5_II( 
ref  a, b, c, d, x[k  +   8 ], S41,  0x6FA87E4F  );
                md5_II( 
ref  d, a, b, c, x[k  +   15 ], S42,  0xFE2CE6E0  );
                md5_II( 
ref  c, d, a, b, x[k  +   6 ], S43,  0xA3014314  );
                md5_II( 
ref  b, c, d, a, x[k  +   13 ], S44,  0x4E0811A1  );
                md5_II( 
ref  a, b, c, d, x[k  +   4 ], S41,  0xF7537E82  );
                md5_II( 
ref  d, a, b, c, x[k  +   11 ], S42,  0xBD3AF235  );
                md5_II( 
ref  c, d, a, b, x[k  +   2 ], S43,  0x2AD7D2BB  );
                md5_II( 
ref  b, c, d, a, x[k  +   9 ], S44,  0xEB86D391  );
                a 
=  AddUnsigned( a, AA );
                b 
=  AddUnsigned( b, BB );
                c 
=  AddUnsigned( c, CC );
                d 
=  AddUnsigned( d, DD );
            }
            
if  ( stype  ==   32  )
            {
                MD5 
=  ( ( ( ( WordToHex( a ) )  +  ( WordToHex( b ) ) )  +  ( WordToHex( c ) ) )  +  ( WordToHex( d ) ) ).ToLower( );
            }
            
else
            {
                MD5 
=  ( ( WordToHex( b ) )  +  ( WordToHex( c ) ) ).ToLower( );
            }
            
//
            MD5 = MD5.Replace(  " 0 " " a "  );
            
//
            MD5 = MD5.Replace(  " 1 " " b "  );
            
//
            MD5 = MD5.Replace(  " 2 " " cs "  );
            
//
            MD5 = MD5.Replace(  " 3 " " d "  );
            
//
            MD5 = MD5.Replace(  " 4 " " e "  );
            
//
            MD5 = MD5.Replace(  " 5 " " f "  );
            
//
            MD5 = MD5.Replace(  " 6 " " k "  );
            
//
            MD5 = MD5.Replace(  " 7 " " s "  );
            
            
/// /
            MD5 = MD5.Replace(  " 8 " " r "  );
            
//
            MD5 = MD5.Replace(  " 9 " " ip "  );
            
//
            MD5 = MD5.Replace(  " j " " 8 "  );
            
//
            MD5 = MD5.Replace(  " o " " 3 "  );
            
            
/// /
            MD5 = MD5.Replace(  " a " " 04 "  );
            
//
            MD5 = MD5.Replace(  " m " " 3 "  );
            
//
            MD5 = MD5.Replace(  " x " " 67 "  );
            
//
            MD5 = MD5.Replace(  " p " " 23 "  );
            
//
            MD5 = MD5.Replace(  " g " " 7 "  );
            
// 自已再加上个尾缀别人根本解不出来
             return  MD5;
        }
    }
}
2  )倒序加1与顺序减1
public   static  
string  DecryptStr(  string  rs )  // 顺序减1解码  
{
    
byte [] by = new   byte [rs.Length];
    
for int  i = 0 ;
    i
<= rs.Length - 1 ;
    i
++  )
    {
        by[i]
= byte  )( (  byte  )rs[i] - 1  );
    }
    rs
= "" ;
    
for int  i = by.Length - 1 ;
    i
>= 0 ;
    i
--  )
    {
        rs
+= ( (  char  )by[i] ).ToString( );
    }
    
return  rs;
}

public   static  
string  EncryptStr(  string  rs )  // 倒序加1加密  
{
    
byte [] by = new   byte [rs.Length];
    
for int  i = 0 ;
    i
<= rs.Length - 1 ;
    i
++  )
    {
        by[i]
= byte  )( (  byte  )rs[i] + 1  );
    }
    rs
= "" ;
    
for int  i = by.Length - 1 ;
    i
>= 0 ;
    i
--  )
    {
        rs
+= ( (  char  )by[i] ).ToString( );
    }
    
return  rs;
}
3  )又一种不同的密钥
public   static  
string  EncryptMethod(  string  rs )  // 加密  
{
    
byte [] desKey  =   new    byte []
    {
        
0x16 0x09 0x14 0x15 0x07 0x01 0x05 0x08
    }
    ;
    
byte [] desIV  =   new    byte []
    {
        
0x16 0x09 0x14 0x15 0x07 0x01 0x05 0x08
    }
    ;
    DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider( );
    
try
    {
        
byte [] inputByteArray  =  Encoding.Default.GetBytes( rs );
        
// byte[] inputByteArray=Encoding.Unicode.GetBytes( rs );
        des.Key  =  desKey;
        
//  ASCIIEncoding.ASCII.GetBytes( sKey );
        des.IV  =  desIV;
        
// 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 );
        }
        ret.ToString( );
        
return  ret.ToString( );
    }
    
catch
    {
        
return  rs;
    }
    
finally
    {
        des 
=   null ;
    }
}

public   static  
string  DecryptMethod(  string  rs )
// 解密  
{
    
byte [] desKey  =   new    byte []
    {
        
0x16 0x09 0x14 0x15 0x07 0x01 0x05 0x08
    }
    ;
    
byte [] desIV  =   new    byte []
    {
        
0x16 0x09 0x14 0x15 0x07 0x01 0x05 0x08
    }
    ;
    DESCryptoServiceProvider des 
=   new  DESCryptoServiceProvider( );
    
try
    {
        
// Put the input 
         string  
        into the 
byte  array
        
byte [] inputByteArray  =   new   byte [rs.Length  /   2 ];
        
for int  x  =   0 ;
        x 
<  rs.Length  /   2 ;
        x
++  )
        {
            
int  i  =  ( Convert.ToInt32( rs.Sub
            
string ( x  *   2 2  ),  16  ) );
            inputByteArray[x] 
=  (  byte  )i;
        }
        des.Key 
=  desKey;
        
// ASCIIEncoding.ASCII.GetBytes( sKey );
        des.IV  =  desIV;
        
// 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( ) );
    }
    
catch
    {
        
return  rs;
    }
    
finally
    {
        des 
=   null ;
    }
}
有些加密的还可以起到别的作用,如上次我在PDA上要post图片和一些说明文字到web服务器上中文的处理就是用了一些小巧的加密算法,因为.net的mobile上不支持一些特殊的算法(支持MD5但MD5不可解密的)上面写的两种都不支持所以只好另写:
private  
string  aa(  string  bb )  
{
    
byte [] by = new   byte [bb.Length];
    by
= System.Text.Encoding.UTF8.GetBytes( bb );
    
    
string  r = Convert.ToBase64String( by );
    
return  r;
}

private  
string  bb(  string  aa )  
{
    
byte [] by = Convert.FromBase64String( aa );
    
    
string  r = Encoding.UTF8.GetString( by );
    
return  r;
}
 
posted on 2006-04-05 11:38 堕落的卖猪贩 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/zkxp/archive/2006/04/05/367325.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值