一个比较牛的加密算法

据说此加密算法每次加密的结果都不同,但解密的结果相同

using System;

namespace test001
{
 /**
   对sSource,进行加密、解密操作。
   @param sSource String :操作的字符串
   @param iFlag int :操作类型 1-加密  2-解密
   @return String :加密或解密后的字符串
    **/
 public class password
 {
  public password()
  {
  }
  public static 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)
     {
      if(li_rand%2 ==1)
       li_rand=li_rand+1;
      ls_i=((char)(li_rand)).ToString()+((char)(li_asc -i -li_head)).ToString();
     }
     else
     {
      if(li_rand%2 ==0)
       li_rand=li_rand+1;
      ls_i=((char)(li_rand)).ToString()+((char)(li_asc +i +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;
  }
 }
}

 

 

执行同一方法,间隔应该大于10毫秒,否则加密结果很大几率是同样的。
如下:
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
如此结果必然有同样的,一般的情况下会出现后面三个是同样的结果。如此结果确实不一样~~~
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
Thread.Sleep(100);
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
Thread.Sleep(100);
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);
Thread.Sleep(100);
password.pWord("sfdaslkfklsdngnsdgnsdgs@22", 1);

 

posted @ 2008-08-24 10:35  refuly  阅读(302)  评论(0编辑  收藏  举报