山德的愚行  
 1/// <summary>
 2        /// 三位64位加密
 3        /// </summary>
 4        /// <param name="name">原字符</param>
 5        /// <param name="key">密鈅</param>
 6        /// <param name="len">原字符最大長度</param>
 7        /// <param name="flx">加密復雜系數大於122不等于64的倍數</param>
 8        /// <returns>返回加密文</returns>

 9        private string GetBuHash(string name,string key,int len,int flx)
10        {
11            //string key="OovM=V5frFWe+w1aEANnjR6sJS2iIbBxZz9QKgqDU43pPLlYycC0uThGHtdX8km7";
12            Random rand;
13            string buinfo="";
14            int k,j,l;
15            if(name==null || name.Length<1|| name.Length>len) return "";
16            int rndid=262144/flx;
17            for(int i=0;i<len;i++)
18            {
19                rand=new Random((int)((i+1)*DateTime.Now.Ticks)%Int32.MaxValue);
20                j=rand.Next(rndid);
21                
22                k=j*flx;
23                if(i<name.Length)
24                    l=(int)name[i];
25                else
26                    l=rand.Next(10)+48;
27                k+=l;
28                buinfo+=convert(k,64,key);
29                
30            }

31            return buinfo;
32            
33        }

以上加密方法尚未改進,適合字母.
以下是解密函數.
 1        public static string RgetBuStr(string pass,string key,int flx)
 2        {
 3            if(pass.Length>0 && pass.Length%3!=0return "";
 4            int ind,total=0,k,j=0;
 5            char[] ch=new char[pass.Length/3];
 6            for(int i=0;i<pass.Length/3;i++)
 7            {
 8                ind=key.IndexOf(pass[i*3]);
 9                if(ind>-1) total+=ind*64*64;
10                ind=key.IndexOf(pass[i*3+1]);
11                if(ind>-1) total+=ind*64;
12                ind=key.IndexOf(pass[i*3+2]);
13                if(ind>-1) total+=ind;
14                k=total%flx;
15                ch[i]=(char)k;
16                if(k<58) j++;
17                total=0;
18            }

19            return new String(ch);//返回解密原文.
20            //return new String(ch,0,pass.Length/3-j);返回原文.
21        }

以下是產生64位密碼(由64個不同字符,類似base64,故密碼中的字符不重復)的方法:
 1private string GetKey()
 2        {
 3            char dd;
 4            int i;
 5            Random rand;
 6            System.Text.StringBuilder retstr=new StringBuilder("");
 7            for(int j=0;j<64;j++)
 8            {
 9                rand=new Random((int)((j+1)*DateTime.Now.Ticks)%Int32.MaxValue);
10                i=rand.Next(retstr.Length+1)+1;
11                if(j<10)
12                {
13                    dd=(char)(j+48);
14                }

15                else if(j>=10 && j<=35)
16                {
17                    dd=(char)(j+55);
18                }

19                else if(j==62)
20                    dd='+';
21                else if(j==63)
22                    dd='=';
23                else
24                    dd=(char)(j+61);
25                if(retstr.Length<=0
26                    retstr.Append(dd);
27                else if(i>retstr.Length)
28                    retstr.Append(dd);
29                else
30                    retstr.Insert(i-1,dd);
31            }

32            return retstr.ToString();
33        }

歡迎大家指正其中的不足.
已經有進一步改進方法.如加入校驗碼.
之后再奉上.
posted on 2007-10-12 15:25  夜之悲哀  阅读(592)  评论(0编辑  收藏  举报