zoukankan      html  css  js  c++  java
  • 一个比较牛的加密算法

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

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

  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/wubin264/p/1275040.html
Copyright © 2011-2022 走看看