風之力

导航

發布一個加解密的方法,特別是相同的明文產生不同的密文

以下是加密解密的方法
相同的明文,每次生成的密文都不一樣,
 PS:最好不要把加密后的密文用在网页地址栏传值,因为这个加密出来的可能带特殊符号比如? # 之类的,在传到另一个页面时可能REQUEST时被截断,导致解密出来的明文与加密前不一样.


/// <summary>
        
/// 加密解密方法
        
/// </summary>
        
/// <param name="sSource">操作的字符串</param>
        
/// <param name="iFlag">操作類型 1為加密 非1為解密</param>
        
/// <returns>加密或解密后的字符串</returns>
        public string pWord(string sSource,int iFlag)
        {
            
if(sSource==null)
                
return null;
            
if(sSource.Equals(""))
                
return "";
            
int li_len,i,li_asc,li_rand,li_head;
            
string ls_i,ls_code="";
            
if(iFlag ==1)
            {
                li_len 
= sSource.Length;
                Random rdm1 
= new Random(~unchecked((int)DateTime.Now.Ticks)); 
                li_head 
= (int)(rdm1.NextDouble()*10);
                
if(li_head ==0)
                    li_head 
=1;
                
for(i=0; i<li_len; i++)
                {
                    Random rdm2 
= new Random(~unchecked((int)DateTime.Now.Ticks)); 
                    
int rand2 =(int)(rdm2.NextDouble() *94);
                    
if(rand2 ==0)
                        rand2 
=1;
                    li_rand
=rand2+32;
                    li_asc
=Convert.ToInt32(sSource.ToCharArray(i,1)[0]);
                    ls_i
=((char)(li_asc -i)).ToString();

                    
if(li_asc+i+li_head>126) //ASCI码超过126的字模,比如中文这类占两个字节的
                    {
                        
if(li_rand%2 ==1)
                            li_rand
=li_rand+1;
                        ls_i
=((char)(li_rand)).ToString()+((char)(li_asc --li_head)).ToString();
                    }
                    
else //加密的是字母
                    {
                        
if(li_rand%2 ==0
                            li_rand
=li_rand+1;
                        ls_i
=((char)(li_rand)).ToString()+((char)(li_asc ++li_head)).ToString();
                    }
                    ls_code
=ls_code+ls_i;
                }
                Random rdm3 
= new Random(~unchecked((int)DateTime.Now.Ticks)); 
                
int rand1 =(int)(rdm3.NextDouble()*9);
                
if(rand1 ==0)
                    rand1 
=1;
                ls_code
=((char)(rand1*10+li_head+40)).ToString()+ls_code;
            }
            
else
            {
                
int li_ret;
                li_len
=sSource.Length;
                ls_code
="";
                li_ret
=Convert.ToInt32(sSource.ToCharArray(0,1)[0]) %10;
                
for( i=2;i <li_len; i=i+2)
                {
                    li_asc
=Convert.ToInt32(sSource.ToCharArray(i,1)[0]);
                    
if(Convert.ToInt32(sSource.ToCharArray(i - 1,1)[0]) %2 ==0)
                    {
                        ls_i
=((char)(li_asc + (i - 1)/2 + li_ret)).ToString();
                    }
                    
else
                    {
                        ls_i
=((char)(li_asc - (i - 1)/2 - li_ret)).ToString();
                    }
                    ls_code
=ls_code+ls_i;
                }
            }
            
return ls_code;
        }
    


posted on 2007-10-12 12:37  ZY.Zhou  阅读(370)  评论(0编辑  收藏  举报