当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: windows 98 请各位老大给我一个windows 98 下载地址(急用) ......
 ·谁给解释一下什么问题啊    »显示摘要«
    摘要: tracing route to www.163.com [202.108.36.172] over a maximum of 30 hops: 1 * * * request timed out. 2 * * * request timed out. 3 * * * request timed out. 4 * * * request timed out. 5 * * * request......


寻加密算法

1   双向可逆,加密解密  
  2   有java源码,基于applet,不用jce  
  3   加密后秘文字符集可指定,比如只用所有字母小写生成秘文  
  4   支持中文  
  5   转换后密文不能比原文长很多  
   
  谢谢

NO.1   作者: yuebenxian

给你们网站...自己下载..记得加分.^_^  
  http://www.programsalon.com/download.asp?type_id=35

NO.2   作者: scbb

/*  
    *   $Header:   /u/users20/santtu/src/java/MD5/RCS/MD5.java,v   1.5   1996/12/12   10:47:02   santtu   Exp   $  
    *  
    *   MD5   in   Java   JDK   Beta-2  
    *   written   Santeri   Paavolainen,   Helsinki   Finland   1996  
    *   (c)   Santeri   Paavolainen,   Helsinki   Finland   1996  
    *  
    *   This   library   is   free   software;   you   can   redistribute   it   and/or  
    *   modify   it   under   the   terms   of   the   GNU   Library   General   Public  
    *   License   as   published   by   the   Free   Software   Foundation;   either  
    *   version   2   of   the   License,   or   (at   your   option)   any   later   version.  
    *    
    *   This   library   is   distributed   in   the   hope   that   it   will   be   useful,  
    *   but   WITHOUT   ANY   WARRANTY;   without   even   the   implied   warranty   of  
    *   MERCHANTABILITY   or   FITNESS   FOR   A   PARTICULAR   PURPOSE.     See   the   GNU  
    *   Library   General   Public   License   for   more   details.  
    *    
    *   You   should   have   received   a   copy   of   the   GNU   Library   General   Public  
    *   License   along   with   this   library;   if   not,   write   to   the   Free  
    *   Software   Foundation,   Inc.,   675   Mass   Ave,   Cambridge,   MA   02139,   USA.  
    *    
    *   See   http://www.cs.hut.fi/~santtu/java/   for   more   information   on   this  
    *   class.  
    *    
    *   This   is   rather   straight   re-implementation   of   the   reference   implementation  
    *   given   in   RFC1321   by   RSA.  
    *  
    *   Passes   MD5   test   suite   as   defined   in   RFC1321.  
    *  
    *  
    *   This   Java   class   has   been   derived   from   the   RSA   Data   Security,   Inc.   MD5    
    *   Message-Digest   Algorithm   and   its   reference   implementation.    
    *  
    *  
    *   $Log:   MD5.java,v   $  
    *   Revision   1.5     1996/12/12   10:47:02     santtu  
    *   Changed   GPL   to   LGPL  
    *  
    *   Revision   1.4     1996/12/12   10:30:02     santtu  
    *   Some   typos,   State   ->   MD5State   etc.  
    *  
    *   Revision   1.3     1996/04/15   07:28:09     santtu  
    *   Added   GPL   statemets,   and   RSA   derivate   stametemetsnnts.  
    *  
    *   Revision   1.2     1996/03/04   08:05:48     santtu  
    *   Added   offsets   to   Update   method  
    *  
    *   Revision   1.1     1996/01/07   20:51:59     santtu  
    *   Initial   revision  
    *  
    */  
   
  /**  
    *   Contains   internal   state   of   the   MD5   class  
    */  
   
  class   MD5State   {  
      /**  
        *   128-byte   state    
        */  
      int state[];  
   
      /**  
        *   64-bit   character   count   (could   be   true   Java   long?)  
        */  
      int count[];  
   
      /**  
        *   64-byte   buffer   (512   bits)   for   storing   to-be-hashed   characters  
        */  
      byte buffer[];  
   
      public   MD5State()   {  
          buffer   =   new   byte[64];  
          count   =   new   int[2];  
          state   =   new   int[4];  
           
          state[0]   =   0x67452301;  
          state[1]   =   0xefcdab89;  
          state[2]   =   0x98badcfe;  
          state[3]   =   0x10325476;  
   
          count[0]   =   count[1]   =   0;  
      }  
   
      /**   Create   this   State   as   a   copy   of   another   state   */  
      public   MD5State   (MD5State   from)   {  
          this();  
   
          int   i;  
   
          for   (i   =   0;   i   <   buffer.length;   i++)  
              this.buffer[i]   =   from.buffer[i];  
           
          for   (i   =   0;   i   <   state.length;   i++)  
              this.state[i]   =   from.state[i];  
   
          for   (i   =   0;   i   <   count.length;   i++)  
              this.count[i]   =   from.count[i];  
      }  
  };  
   
  /**  
    *   Implementation   of   RSAs   MD5   hash   generator  
    *  
    *   @version $Revision:   1.5   $  
    *   @author Santeri   Paavolainen   <sjpaavol@cc.helsinki.fi>  
    */  
   
  public   class   MD5   {  
      /**  
        *   MD5   state  
        */  
      MD5State state;  
     
      /**  
        *   If   Final()   has   been   called,   finals   is   set   to   the   current   finals  
        *   state.   Any   Update()   causes   this   to   be   set   to   null.  
        */  
      MD5State   finals;  
   
      /**    
        *   Padding   for   Final()  
        */  
      static   byte padding[]   =   {  
          (byte)   0x80,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,    
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,    
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0  
      };  
   
      /**  
        *   Initialize   MD5   internal   state   (object   can   be   reused   just   by  
        *   calling   Init()   after   every   Final()  
        */  
      public   synchronized   void   Init   ()   {  
          state   =   new   MD5State();  
          finals   =   null;  
      }  
 

NO.3   作者: scbb

 
      /**  
        *   Class   constructor  
        */  
      public   MD5   ()   {  
          this.Init();  
      }  
   
      /**  
        *   Initialize   class,   and   update   hash   with   ob.toString()  
        *  
        *   @param ob Object,   ob.toString()   is   used   to   update   hash  
        * after   initialization  
        */  
      public   MD5   (Object   ob)   {  
          this();  
          Update(ob.toString());  
      }  
   
      private   int   rotate_left   (int   x,   int   n)   {  
          return   (x   <<   n)   |   (x   >>>   (32   -   n));  
      }  
   
      /*   I   wonder   how   many   loops   and   hoops   youll   have   to   go   through   to  
            get   unsigned   add   for   longs   in   java   */  
   
      private   int   uadd   (int   a,   int   b)   {  
          long   aa,   bb;  
          aa   =   ((long)   a)   &   0xffffffffL;  
          bb   =   ((long)   b)   &   0xffffffffL;  
           
          aa   +=   bb;  
   
          return   (int)   (aa   &   0xffffffffL);  
      }  
   
      private   int   uadd   (int   a,   int   b,   int   c)   {  
          return   uadd(uadd(a,   b),   c);  
      }  
   
      private   int   uadd   (int   a,   int   b,   int   c,   int   d)   {  
          return   uadd(uadd(a,   b,   c),   d);  
      }  
   
      private   int   FF   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {  
          a   =   uadd(a,   ((b   &   c)   |   (~b   &   d)),   x,   ac);  
          return   uadd(rotate_left(a,   s),   b);  
      }  
   
      private   int   GG   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {  
          a   =   uadd(a,   ((b   &   d)   |   (c   &   ~d)),   x,   ac);  
          return   uadd(rotate_left(a,   s),   b);  
      }  
   
      private   int   HH   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {    
          a   =   uadd(a,   (b   ^   c   ^   d),   x,   ac);  
          return   uadd(rotate_left(a,   s)   ,   b);  
      }  
   
      private   int   II   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {      
          a   =   uadd(a,   (c   ^   (b   |   ~d)),   x,   ac);  
          return   uadd(rotate_left(a,   s),   b);  
      }  
   
      private   int[]   Decode   (byte   buffer[],   int   len,   int   shift)   {  
          int out[];  
          int   i,   j;  
   
          out   =   new   int[16];  
   
          for   (i   =   j   =   0;   j   <   len;   i++,   j   +=   4)   {  
              out[i]   =   ((int)   (buffer[j   +   shift]   &   0xff))   |    
  (((int)   (buffer[j   +   1   +   shift]   &   0xff))   <<   8)   |  
  (((int)   (buffer[j   +   2   +   shift]   &   0xff))   <<   16)   |    
  (((int)   (buffer[j   +   3   +   shift]   &   0xff))   <<   24);  
   
  /*             System.out.println("out["   +   i   +   "]   =   \t"   +  
    ((int)   buffer[j   +   0   +   shift]   &   0xff)   +   "\t|\t"   +  
    ((int)   buffer[j   +   1   +   shift]   &   0xff)   +   "\t|\t"   +  
    ((int)   buffer[j   +   2   +   shift]   &   0xff)   +   "\t|\t"   +  
    ((int)   buffer[j   +   3   +   shift]   &   0xff));*/  
          }  
           
          return   out;  
      }  
   
 

NO.4   作者: scbb

public   class   MD5   {  
      /**  
        *   MD5   state  
        */  
      MD5State state;  
     
      /**  
        *   If   Final()   has   been   called,   finals   is   set   to   the   current   finals  
        *   state.   Any   Update()   causes   this   to   be   set   to   null.  
        */  
      MD5State   finals;  
   
      /**    
        *   Padding   for   Final()  
        */  
      static   byte padding[]   =   {  
          (byte)   0x80,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,    
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,    
          0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0  
      };  
   
      /**  
        *   Initialize   MD5   internal   state   (object   can   be   reused   just   by  
        *   calling   Init()   after   every   Final()  
        */  
      public   synchronized   void   Init   ()   {  
          state   =   new   MD5State();  
          finals   =   null;  
      }  
   
      /**  
        *   Class   constructor  
        */  
      public   MD5   ()   {  
          this.Init();  
      }  
   
      /**  
        *   Initialize   class,   and   update   hash   with   ob.toString()  
        *  
        *   @param ob Object,   ob.toString()   is   used   to   update   hash  
        * after   initialization  
        */  
      public   MD5   (Object   ob)   {  
          this();  
          Update(ob.toString());  
      }  
   
      private   int   rotate_left   (int   x,   int   n)   {  
          return   (x   <<   n)   |   (x   >>>   (32   -   n));  
      }  
   
      /*   I   wonder   how   many   loops   and   hoops   youll   have   to   go   through   to  
            get   unsigned   add   for   longs   in   java   */  
   
      private   int   uadd   (int   a,   int   b)   {  
          long   aa,   bb;  
          aa   =   ((long)   a)   &   0xffffffffL;  
          bb   =   ((long)   b)   &   0xffffffffL;  
           
          aa   +=   bb;  
   
          return   (int)   (aa   &   0xffffffffL);  
      }  
   
      private   int   uadd   (int   a,   int   b,   int   c)   {  
          return   uadd(uadd(a,   b),   c);  
      }  
   
      private   int   uadd   (int   a,   int   b,   int   c,   int   d)   {  
          return   uadd(uadd(a,   b,   c),   d);  
      }  
   
      private   int   FF   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {  
          a   =   uadd(a,   ((b   &   c)   |   (~b   &   d)),   x,   ac);  
          return   uadd(rotate_left(a,   s),   b);  
      }  
   
      private   int   GG   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {  
          a   =   uadd(a,   ((b   &   d)   |   (c   &   ~d)),   x,   ac);  
          return   uadd(rotate_left(a,   s),   b);  
      }  
   
      private   int   HH   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {    
          a   =   uadd(a,   (b   ^   c   ^   d),   x,   ac);  
          return   uadd(rotate_left(a,   s)   ,   b);  
      }  
   
      private   int   II   (int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   ac)   {      
          a   =   uadd(a,   (c   ^   (b   |   ~d)),   x,   ac);  
          return   uadd(rotate_left(a,   s),   b);  
      }  
   
      private   int[]   Decode   (byte   buffer[],   int   len,   int   shift)   {  
          int out[];  
          int   i,   j;  
   
          out   =   new   int[16];  
   
          for   (i   =   j   =   0;   j   <   len;   i++,   j   +=   4)   {  
              out[i]   =   ((int)   (buffer[j   +   shift]   &   0xff))   |    
  (((int)   (buffer[j   +   1   +   shift]   &   0xff))   <<   8)   |  
  (((int)   (buffer[j   +   2   +   shift]   &   0xff))   <<   16)   |    
  (((int)   (buffer[j   +   3   +   shift]   &   0xff))   <<   24);  
   
  /*             System.out.println("out["   +   i   +   "]   =   \t"   +  
    ((int)   buffer[j   +   0   +   shift]   &   0xff)   +   "\t|\t"   +  
    ((int)   buffer[j   +   1   +   shift]   &   0xff)   +   "\t|\t"   +  
    ((int)   buffer[j   +   2   +   shift]   &   0xff)   +   "\t|\t"   +  
    ((int)   buffer[j   +   3   +   shift]   &   0xff));*/  
          }  
           
          return   out;  
      }

NO.5   作者: lynx1111

md5不可逆!

NO.6   作者: captiveRobotCN

public   class   MD5    
  {    
  /*    
  *   A   Java   implementation   of   the   RSA   Data   Security,   Inc.   MD5   Message    
  *   Digest   Algorithm,   as   defined   in   RFC   1321.    
  *   Based   on   the   javascript   implementation   of   Paul   Johnston    
  *   Copyright   (C)   Paul   Johnston   1999   -   2000.    
  *   See   http://pajhome.org.uk/site/legal.html   for   details.    
  *   Java   Version   by   Thomas   Weber   (Orange   Interactive   GmbH)    
  */    
  /*    
  *   Convert   a   32-bit   number   to   a   hex   string   with   ls-byte   first    
  */    
  String   hex_chr   =   "0123456789abcdef";    
  private   String   rhex(int   num)    
  {    
  String   str   =   "";    
  for(int   j   =   0;   j   <=   3;   j++)    
  str   =   str   +   hex_chr.charAt((num   >>   (j   *   8   +   4))   &   0x0F)   +   hex_chr.charAt((num   >>   (j   *   8))   &   0x0F);    
  return   str;    
  }    
   
  /*    
  *   Convert   a   string   to   a   sequence   of   16-word   blocks,   stored   as   an   array.    
  *   Append   padding   bits   and   the   length,   as   described   in   the   MD5   standard.    
  */    
  private   int[]   str2blks_MD5(String   str)    
  {    
  int   nblk   =   ((str.length()   +     >>   6)   +   1;    
  int[]   blks   =   new   int[nblk   *   16];    
  int   i   =   0;    
  for(i   =   0;   i   <   nblk   *   16;   i++)   {    
  blks[i]   =   0;    
  }    
  for(i   =   0;   i   <   str.length();   i++)   {    
  blks[i   >>   2]   |=   str.charAt(i)   <<   ((i   %   4)   *   8);    
  }    
  blks[i   >>   2]   |=   0x80   <<   ((i   %   4)   *   8);    
  blks[nblk   *   16   -   2]   =   str.length()*8;    
   
  return   blks;    
  }    
   
  /*    
  *   Add   integers,   wrapping   at   2^32    
  */    
  private   int   add(int   x,   int   y)    
  {    
  return   ((x&0x7FFFFFFF)   +   (y&0x7FFFFFFF))   ^   (x&0x80000000)   ^   (y&0x80000000);    
  }    
   
  /*    
  *   Bitwise   rotate   a   32-bit   number   to   the   left    
  */    
  private   int   rol(int   num,   int   cnt)    
  {    
  return   (num   <<   cnt)   |   (num   >>>   (32   -   cnt));    
  }    
   
  /*    
  *   These   functions   implement   the   basic   operation   for   each   round   of   the    
  *   algorithm.    
  */    
  private   int   cmn(int   q,   int   a,   int   b,   int   x,   int   s,   int   t)    
  {    
  return   add(rol(add(add(a,   q),   add(x,   t)),   s),   b);    
  }    
  private   int   ff(int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   t)    
  {    
  return   cmn((b   &   c)   |   ((~b)   &   d),   a,   b,   x,   s,   t);    
  }    
  private   int   gg(int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   t)    
  {    
  return   cmn((b   &   d)   |   (c   &   (~d)),   a,   b,   x,   s,   t);    
  }    
  private   int   hh(int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   t)    
  {    
  return   cmn(b   ^   c   ^   d,   a,   b,   x,   s,   t);    
  }    
  private   int   ii(int   a,   int   b,   int   c,   int   d,   int   x,   int   s,   int   t)    
  {    
  return   cmn(c   ^   (b   |   (~d)),   a,   b,   x,   s,   t);    
  }    
   
  /*    
  *   Take   a   string   and   return   the   hex   representation   of   its   MD5.    
  */    
  public   String   calcMD5(String   str)    
  {    
  int[]   x   =   str2blks_MD5(str);    
  int   a   =   0x67452301;    
  int   b   =   0xEFCDAB89;    
  int   c   =   0x98BADCFE;    
  int   d   =   0x10325476;    
   
  for(int   i   =   0;   i   <   x.length;   i   +=   16)    
  {    
  int   olda   =   a;    
  int   oldb   =   b;    
  int   oldc   =   c;    
  int   oldd   =   d;    
   
  a   =   ff(a,   b,   c,   d,   x[i+   0],   7   ,   0xD76AA478);    
  d   =   ff(d,   a,   b,   c,   x[i+   1],   12,   0xE8C7B756);    
  c   =   ff(c,   d,   a,   b,   x[i+   2],   17,   0x242070DB);    
  b   =   ff(b,   c,   d,   a,   x[i+   3],   22,   0xC1BDCEEE);    
  a   =   ff(a,   b,   c,   d,   x[i+   4],   7   ,   0xF57C0FAF);    
  d   =   ff(d,   a,   b,   c,   x[i+   5],   12,   0x4787C62A);    
  c   =   ff(c,   d,   a,   b,   x[i+   6],   17,   0xA8304613);    
  b   =   ff(b,   c,   d,   a,   x[i+   7],   22,   0xFD469501);    
  a   =   ff(a,   b,   c,   d,   x[i+   8],   7   ,   0x698098D8);    
  d   =   ff(d,   a,   b,   c,   x[i+   9],   12,   0x8B44F7AF);    
  c   =   ff(c,   d,   a,   b,   x[i+10],   17,   0xFFFF5BB1);    
  b   =   ff(b,   c,   d,   a,   x[i+11],   22,   0x895CD7BE);    
  a   =   ff(a,   b,   c,   d,   x[i+12],   7   ,   0x6B901122);    
  d   =   ff(d,   a,   b,   c,   x[i+13],   12,   0xFD987193);    
  c   =   ff(c,   d,   a,   b,   x[i+14],   17,   0xA679438E);    
  b   =   ff(b,   c,   d,   a,   x[i+15],   22,   0x49B40821);    
   
  a   =   gg(a,   b,   c,   d,   x[i+   1],   5   ,   0xF61E2562);    
  d   =   gg(d,   a,   b,   c,   x[i+   6],   9   ,   0xC040B340);    
  c   =   gg(c,   d,   a,   b,   x[i+11],   14,   0x265E5A51);    
  b   =   gg(b,   c,   d,   a,   x[i+   0],   20,   0xE9B6C7AA);    
  a   =   gg(a,   b,   c,   d,   x[i+   5],   5   ,   0xD62F105D);    
  d   =   gg(d,   a,   b,   c,   x[i+10],   9   ,   0x02441453);    
  c   =   gg(c,   d,   a,   b,   x[i+15],   14,   0xD8A1E681);    
  b   =   gg(b,   c,   d,   a,   x[i+   4],   20,   0xE7D3FBC8);    
  a   =   gg(a,   b,   c,   d,   x[i+   9],   5   ,   0x21E1CDE6);    
  d   =   gg(d,   a,   b,   c,   x[i+14],   9   ,   0xC33707D6);    
  c   =   gg(c,   d,   a,   b,   x[i+   3],   14,   0xF4D50D87);    
  b   =   gg(b,   c,   d,   a,   x[i+   8],   20,   0x455A14ED);    
  a   =   gg(a,   b,   c,   d,   x[i+13],   5   ,   0xA9E3E905);    
  d   =   gg(d,   a,   b,   c,   x[i+   2],   9   ,   0xFCEFA3F8);    
  c   =   gg(c,   d,   a,   b,   x[i+   7],   14,   0x676F02D9);    
  b   =   gg(b,   c,   d,   a,   x[i+12],   20,   0x8D2A4C8A);    
   
  a   =   hh(a,   b,   c,   d,   x[i+   5],   4   ,   0xFFFA3942);    
  d   =   hh(d,   a,   b,   c,   x[i+   8],   11,   0x8771F681);    
  c   =   hh(c,   d,   a,   b,   x[i+11],   16,   0x6D9D6122);    
  b   =   hh(b,   c,   d,   a,   x[i+14],   23,   0xFDE5380C);    
  a   =   hh(a,   b,   c,   d,   x[i+   1],   4   ,   0xA4BEEA44);    
  d   =   hh(d,   a,   b,   c,   x[i+   4],   11,   0x4BDECFA9);    
  c   =   hh(c,   d,   a,   b,   x[i+   7],   16,   0xF6BB4B60);    
  b   =   hh(b,   c,   d,   a,   x[i+10],   23,   0xBEBFBC70);    
  a   =   hh(a,   b,   c,   d,   x[i+13],   4   ,   0x289B7EC6);    
  d   =   hh(d,   a,   b,   c,   x[i+   0],   11,   0xEAA127FA);    
  c   =   hh(c,   d,   a,   b,   x[i+   3],   16,   0xD4EF3085);    
  b   =   hh(b,   c,   d,   a,   x[i+   6],   23,   0x04881D05);    
  a   =   hh(a,   b,   c,   d,   x[i+   9],   4   ,   0xD9D4D039);    
  d   =   hh(d,   a,   b,   c,   x[i+12],   11,   0xE6DB99E5);    
  c   =   hh(c,   d,   a,   b,   x[i+15],   16,   0x1FA27CF8);    
  b   =   hh(b,   c,   d,   a,   x[i+   2],   23,   0xC4AC5665);    
   
  a   =   ii(a,   b,   c,   d,   x[i+   0],   6   ,   0xF4292244);    
  d   =   ii(d,   a,   b,   c,   x[i+   7],   10,   0x432AFF97);    
  c   =   ii(c,   d,   a,   b,   x[i+14],   15,   0xAB9423A7);    
  b   =   ii(b,   c,   d,   a,   x[i+   5],   21,   0xFC93A039);    
  a   =   ii(a,   b,   c,   d,   x[i+12],   6   ,   0x655B59C3);    
  d   =   ii(d,   a,   b,   c,   x[i+   3],   10,   0x8F0CCC92);    
  c   =   ii(c,   d,   a,   b,   x[i+10],   15,   0xFFEFF47D);    
  b   =   ii(b,   c,   d,   a,   x[i+   1],   21,   0x85845DD1);    
  a   =   ii(a,   b,   c,   d,   x[i+   8],   6   ,   0x6FA87E4F);    
  d   =   ii(d,   a,   b,   c,   x[i+15],   10,   0xFE2CE6E0);    
  c   =   ii(c,   d,   a,   b,   x[i+   6],   15,   0xA3014314);    
  b   =   ii(b,   c,   d,   a,   x[i+13],   21,   0x4E0811A1);    
  a   =   ii(a,   b,   c,   d,   x[i+   4],   6   ,   0xF7537E82);    
  d   =   ii(d,   a,   b,   c,   x[i+11],   10,   0xBD3AF235);    
  c   =   ii(c,   d,   a,   b,   x[i+   2],   15,   0x2AD7D2BB);    
  b   =   ii(b,   c,   d,   a,   x[i+   9],   21,   0xEB86D391);    
   
  a   =   add(a,   olda);    
  b   =   add(b,   oldb);    
  c   =   add(c,   oldc);    
  d   =   add(d,   oldd);    
  }    
  return   rhex(a)   +   rhex(b)   +   rhex(c)   +   rhex(d);    
  }    
   
  }  
   
 

NO.7   作者: fpwang

我正准备学MD5,没想到得到源代码  
  向scbb(星际Baby、captiveRobotCN(俘虏)致谢  
  我把我开发的BASE64开放出来,大家交流吧  
  BASE64很简单,是可逆的加密算法,我开发他是为用于SMTP认证。  
  /*  
      Base64   字符表  
      码值   字符             码值   字符             码值   字符             码值   字符  
            0         A                 17         R                 34         i                 51         z  
            1         B                 18         S                 35         j                 52         0  
            2         C                 19         T                 36         k                 53         1  
            3         D                 20         U                 37         l                 54         2  
            4         E                 21         V                 38         m                 55         3  
            5         F                 22         W                 39         n                 56         4  
            6         G                 23         X                 40         o                 57         5  
            7         H                 24         Y                 41         p                 58         6  
            8         I                 25         Z                 42         q                 59         7  
            9         J                 26         a                 43         r                 60         8  
          10         K                 27         b                 44         s                 61         9  
          11         L                 28         c                 45         t                 62         +  
          12         M                 29         d                 46         u                 63         /  
          13         N                 30         e                 47         v  
          14         O                 31         f                 48         w           (pad)         =  
          15         P                 32         g                 49         x  
          16         Q                 33         h                 50         y  
  */  
   
  public   class   Base64{  
      public   static   char   BASETABLE[]={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,+,/,=};  
   
      public   static   String   encode(String   text){  
          /*编码算法  
              1.将数据按3个字节一组分成数块;  
              2.每块将3个8位的数据转换成4个6位数据段;  
                  11111111   00000000   11111111     ----     111111   110000   000011   111111  
              3.根据Base64字符表得到4个6位数据段对应的字符;  
              4.如果最后一块只有两个字节,则添加两个0位,转换成对应Base64字符表的三个字符,并在结尾添一个=字符;  
                  如果最后一块只有一个字节,则添加四个0位,转换成对应Base64字符表的两个字符,并在结尾添两个=字符。  
          */  
          StringBuffer   code=new   StringBuffer();  
          int   textLength=text.length();  
          int   blockCount=(int)textLength/3;  
          char[]   textChars=new   char[textLength];  
          int   ch,   bits;  
          text.getChars(0,   textLength,   textChars,   0);  
   
          for(int   i=0;i<blockCount;i++){  
              ch=(int)textChars[0+i*3];  
              ch=ch>>>2;  
              code.append(BASETABLE[ch]);  
              bits=(int)textChars[0+i*3]-ch*4;  
              ch=(int)textChars[1+i*3];  
              ch=ch>>>4;  
              code.append(BASETABLE[ch+bits*16]);  
              bits=(int)textChars[1+i*3]-ch*16;  
              ch=(int)textChars[2+i*3];  
              ch=ch>>>6;  
              code.append(BASETABLE[ch+bits*4]);  
              bits=(int)textChars[2+i*3]-ch*64;  
              code.append(BASETABLE[bits]);  
          }  
          if((textLength   %   3)!=0)  
              {   ch=(int)textChars[blockCount*3];  
                  ch=ch>>>2;  
                  code.append(BASETABLE[ch]);  
                  bits=(int)textChars[blockCount*3]-ch*4;  
                  switch(textLength   %   3){  
                      case   1:   code.append(BASETABLE[bits*16]);  
                                      code.append(BASETABLE[64]);  
                                      code.append(BASETABLE[64]);  
                                      break;  
                      case   2:   ch=(int)textChars[1+blockCount*3];  
                                      ch=ch>>>4;  
                                      code.append(BASETABLE[ch+bits*16]);  
                                      bits=(int)textChars[1+blockCount*3]-ch*16;  
                                      code.append(BASETABLE[bits*4]);  
                                      code.append(BASETABLE[64]);  
                                      break;  
                  }  
              }  
   
          return   code.toString();  
      }  
   
      public   static   String   decode(String   code){  
          /*解码算法  
              1.将数据按4个字节一组分成数块;  
              2.每块将4个字符去掉最高两位并转换成3个8位的数据段;  
                  注意:数据块中的字符取值不是ASCII集的值,而是Base64字符表中相对应的索引值!  
                  00   111111       00   110000       00   000011       00   111111   ----   11111111   00000000   11111111  
              3.根据ASCII字符集得到3个8位数据段对应的字符;  
              4.如果最后一块只有两个=,去掉两个=,并去掉最低两位,转换成对应ASSCII字符集的两个字符;  
                  如果最后一块只有一个=,去掉=,并去掉最低四位,转换成对应ASSCII字符集的一个字符。  
          */  
          StringBuffer   text=new   StringBuffer();  
          int   codeLength=code.length();  
          int   blockCount=(int)codeLength/4;  
          char[]   codeChars=new   char[codeLength];  
          int   ch,   bits;  
          code.getChars(0,   codeLength,   codeChars,   0);  
   
          for(int   i=0;i<blockCount;i++){  
              bits=indexOfBase64Table(codeChars[1+i*4])>>>4;  
              ch=indexOfBase64Table(codeChars[0+i*4])*4+bits;  
              text.append((char)ch);  
              if(codeChars[2+i*4]!==){  
                  ch=(indexOfBase64Table(codeChars[1+i*4])-bits*16)*16;  
                  bits=indexOfBase64Table(codeChars[2+i*4])>>>2;  
                  ch=ch+bits;  
                  text.append((char)ch);  
                  if(codeChars[3+i*4]!==){  
                      ch=(indexOfBase64Table(codeChars[2+i*4])-bits*4)*64+indexOfBase64Table(codeChars[3+i*4]);  
                      text.append((char)ch);  
                  }  
              }  
          }  
   
          return   text.toString();  
      }  
   
      private   static   int   indexOfBase64Table(char   ch){  
          for(int   i=0;i<64;i++)   if(ch==BASETABLE[i])   return   i;  
          return   -1;  
      }  
  }

NO.8   作者: ll42002

我这有IDEA算法:  
  import   java.util.*;  
   
  /**   IDEA   encryption   and   decryption   algorithm  
    *   @author   tekie  
    *   usage:  
    *   .Set_k,.Creat_encrypt_sub_k,[.Creat_decrypt_sub_k,]  
    *   .Set_m,.Encrypt|.Decrypt,.Get_c,|{.Set_m,.Encrypt|.Decrypt,.Get_c}  
    */  
  class   myidea{  
   
  /*   源数据   */  
  private   byte   m_string[];  
  /*   目标数据   */  
  private   byte   c_string[];  
  /*   密钥   */  
  private   byte   k_string[];  
  /*   数据块   1,   2,   3,   4   */  
  private   char   X1,X2,X3,X4;  
  /*   加密子密钥   */  
  private   char   Z[];  
  /*   解密子密钥   */  
  private   char   Z_1[];  
                  /*   */  
  private   char   temp1,temp2,temp3,temp4,temp5;  
  private   char   temp6,temp7,temp8,temp9,temp10;  
   
                  /*   初始化   */  
  myidea()  
  {  
  m_string=new   byte[8];  
  c_string=new   byte[8];  
  k_string=new   byte[16];  
  Z=new   char[53];  
  Z_1=new   char[53];  
  }    
   
  /*   */  
  private   char   inv(char   x)  
  {  
  char   t0,   t1,q,   y;  
  if   (x   <=   1)  
  return   x; /*   0   and   1   are   self-inverse   */  
  t1   =   (char)(0x10001   /   x); /*   Since   x   >=   2,   this   fits   into   16   bits   */  
  y   =   (char)(0x10001   %   x);  
  if   (y   ==   1)  
  return   (char)(1-t1);  
  t0   =   1;  
  do  
  { q   =   (char)(x   /   y);  
  x   =   (char)(x   %   y);  
  t0   +=(char)(q   *   t1);  
  if   (x   ==   1)  
  return   t0;  
  q   =   (char)(y   /   x);  
  y   =   (char)(y   %   x);  
  t1   +=(char)(q   *   t0);  
  }   while   (y   !=   1);  
  return   (char)(1-t1);  
  }  
   
  /*   */  
  private   char   multiply(char   input1,char   input2)  
  {  
  long   p=input1*input2;  
  if   (p   ==   0)  
  input2   =   (char)(65537-input1-input2);  
  else   {  
  input1   =   (char)(p   >>   16);  
  input2   =   (char)p;  
  input1   =   (char)(input2-input1);  
   
  if   (input2   <   input1)   input1   +=   65537;  
  }  
  return   input1;  
  }  
   
  /*   */  
  private   void   Separate_m_2_X()  
  {  
  //本函数的目的是从m   string中得到X1,X2,X3,X4  
  //get   X1,X2,X3,X4   from   m   string  
                  char   temp;  
   
  X1=(char)m_string[0];  
  X1<<=8;  
  temp=(char)m_string[1];  
  temp&=0xFF;  
  X1|=temp;  
   
  X2=(char)m_string[2];  
  X2<<=8;  
  temp=(char)m_string[3];  
  temp&=0xFF;  
  X2|=temp;  
   
  X3=(char)m_string[4];  
  X3<<=8;  
  temp=(char)m_string[5];  
  temp&=0xFF;  
  X3|=temp;  
   
  X4=(char)m_string[6];  
  X4<<=8;  
  temp=(char)m_string[7];  
  temp&=0xFF;  
  X4|=temp;  
  }  
   
  /**   设置密钥    
    *   @param   input_k_string   input   the   128bit   key(16   byte)  
    *   @return   No   return   value  
    */  
  void   Set_k(byte[]   input_k_string)  
  {  
  //本函数的目的是设置密钥  
  for   (int   i=0;i<=15;i++)   k_string[i]=input_k_string[i];  
  }  
   
                  /**   加密用子密钥运算  
                    *   @param   No   param  
                    *   @return   No   return   value  
                    */  
  void   Creat_encrypt_sub_k()  
  {  
  //本函数的目的是生成加密子密钥  
  //creat   encrypt   sub   key   and   store   to   Z[57]  
  char   temp;  
  byte   temp1,temp2,temp3;  
  int   i;  
  int   num;  
  for   (num=0;num   <=   6;num++){  
  Z[1+num*8]=(char)k_string[0]; Z[1+num*8]<<=8;  
  temp=(char)k_string[1];temp=(char)(temp   &   0x00FF);Z[1+num*8]|=temp;  
   
  Z[2+num*8]=(char)k_string[2];Z[2+num*8]<<=8;  
  temp=(char)k_string[3];temp=(char)(temp   &   0x00FF);Z[2+num*8]|=temp;  
   
  Z[3+num*8]=(char)k_string[4];Z[3+num*8]<<=8;  
  temp=(char)k_string[5];temp=(char)(temp   &   0x00FF);Z[3+num*8]|=temp;  
   
  Z[4+num*8]=(char)k_string[6];Z[4+num*8]<<=8;  
  temp=(char)k_string[7];temp=(char)(temp   &   0x00FF);Z[4+num*8]|=temp;  
  if   (num!=6)   {  
  Z[5+num*8]=(char)k_string[8];Z[5+num*8]<<=8;  
  temp=(char)k_string[9];temp=(char)(temp   &   0x00FF);  
  Z[5+num*8]|=temp;  
  }  
  if   (num!=6){  
  Z[6+num*8]=(char)k_string[10];Z[6+num*8]<<=8;  
  temp=(char)k_string[11];temp=(char)(temp   &   0x00FF);  
  Z[6+num*8]|=temp;  
  }  
  if   (num!=6){  
  Z[7+num*8]=(char)k_string[12];Z[7+num*8]<<=8;  
  temp=(char)k_string[13];temp=(char)(temp   &   0x00FF);  
  Z[7+num*8]|=temp;  
  }  
  if   (num!=6){  
  Z[8+num*8]=(char)k_string[14];Z[8+num*8]<<=8;  
  temp=(char)k_string[15];temp=(char)(temp   &   0x00FF);  
  Z[8+num*8]|=temp;  
  }  
   
  //now,start   to   left   move   25   bit  
  //first   left   move   24   bit  
  temp1=k_string[0];  
  temp2=k_string[1];  
  temp3=k_string[2];  
  for   (i=0;i<=12;i++)   k_string[i]=k_string[i+3];  
  k_string[13]=temp1;k_string[14]=temp2;k_string[15]=temp3;  
   
  //then   left   move   1   bit,sum   25   bit  
  byte   store_bit[]=new   byte[16];//store   k_strings   first   bit.  
  for   (i=15;i   >=   0;i--){  
  //from   high   bit   to   low  
  store_bit[i]=(byte)(k_string[i]   >>   7);  
  store_bit[i]&=0x01;  
  k_string[i]<<=1;  
  if   (i!=15)   k_string[i]+=store_bit[i+1];  
  }  
  k_string[15]+=store_bit[0];  
  //complete   to   left   move   25   bit    
  }//All   encrypt   sub   key   created  
  }  
 

NO.9   作者: ll42002

/**   解密子密钥计算    
    *   @param   No   param  
    *   @return   No   return   value  
    */  
  void   Creat_decrypt_sub_k()  
  {  
  //本函数的目的是生成解密子密钥  
  Z_1[1]=inv(Z[49]);  
  Z_1[2]=(char)(0-Z[50]);  
  Z_1[3]=(char)(0-Z[51]);  
  Z_1[4]=inv(Z[52]);  
  Z_1[5]=(char)(Z[47]);  
  Z_1[6]=Z[48];  
   
  for   (int   i=1;i<=7;i++){  
  Z_1[1+i*6]=inv(Z[49-i*6]);  
  Z_1[2+i*6]=(char)(0-Z[51-i*6]);  
  Z_1[3+i*6]=(char)(0-Z[50-i*6]);  
  Z_1[4+i*6]=inv(Z[52-i*6]);  
  Z_1[5+i*6]=Z[47-i*6];  
  Z_1[6+i*6]=Z[48-i*6];  
  }  
  Z_1[49]=inv(Z[1]);  
  Z_1[50]=(char)(0-Z[2]);  
  Z_1[51]=(char)(0-Z[3]);  
  Z_1[52]=inv(Z[4]);  
  }  
   
  /**   设置源数据  
    *   @param   input_m_string   input   the   source   data   to   be   processed  
    *   @return   No   return   value  
    */  
  void   Set_m(byte[]   input_m_string)  
  {  
  //本函数的目的是设置源数据  
  for   (int   i=0;i<=7;i++)   m_string[i]=input_m_string[i];  
  }  
   
  /**   加密运算  
    *   @param   No   param  
    *   @return   No   return   value  
    */  
  void   Encrypt()  
  {  
  //本函数的目的是加密  
   
  //把m分成X1,X2,X3,X4  
  Separate_m_2_X();  
   
  //下面做8圈叠代  
  for   (int   num=0;num<=7;num++){  
  temp1=multiply(Z[1+num*6],X1);//1  
  temp2=(char)(X2+Z[2+num*6]);//2  
  temp3=(char)(X3+Z[3+num*6]);//3  
  temp4=multiply(Z[4+num*6],X4);//4  
  temp5=(char)(temp1   ^   temp3);//5  
  temp6=(char)(temp2   ^   temp4);//6  
  temp7=multiply(Z[5+num*6],temp5);//7  
  temp8=(char)(temp7+temp6);  
  temp10=multiply(Z[6+num*6],temp8);  
  temp9=(char)(temp7+temp10);  
   
  X1=(char)(temp1   ^   temp10);  
  if   (num!=7){  
  X2=(char)(temp3   ^   temp10);  
  X3=(char)(temp2   ^   temp9);  
  }  
  else{  
  X2=(char)(temp2   ^   temp9);  
  X3=(char)(temp3   ^   temp10);  
  }  
  X4=(char)(temp4   ^   temp9);  
  }//end   of   8   times  
   
  //输出变换  
  X1=multiply(Z[49],X1);  
  X2+=Z[50];  
  X3+=Z[51];  
  X4=multiply(Z[52],X4);  
   
  //把X1,X2,X3,X4复制到c_string中。  
  //now,creat   c_string   from   X1..X4;  
  c_string[1]=(byte)X1; c_string[0]=(byte)(X1>>8);  
  c_string[3]=(byte)X2; c_string[2]=(byte)(X2>>8);  
  c_string[5]=(byte)X3; c_string[4]=(byte)(X3>>8);  
  c_string[7]=(byte)X4; c_string[6]=(byte)(X4>>8);  
   
  //end   of   encryption  
  }  
   
  /**   解密运算  
    *   @param   No   param  
    *   @return   No   return   value  
    */  
  void   Decrypt()  
  {//本函数的目的是解密  
   
  //把m分成X1,X2,X3,X4  
  Separate_m_2_X();  
   
  //下面做8圈叠代  
  for   (int   num=0;num<=7;num++){  
  temp1=multiply(Z_1[1+num*6],X1);//1  
  temp2=(char)(X2+Z_1[2+num*6]);//2  
  temp3=(char)(X3+Z_1[3+num*6]);//3  
  temp4=multiply(Z_1[4+num*6],X4);//4  
  temp5=(char)(temp1   ^   temp3);//5  
  temp6=(char)(temp2   ^   temp4);//6  
  temp7=multiply(Z_1[5+num*6],temp5);//7  
  temp8=(char)(temp7+temp6);  
  temp10=multiply(Z_1[6+num*6],temp8);  
  temp9=(char)(temp7+temp10);  
   
  X1=(char)(temp1   ^   temp10);  
  if   (num!=7){  
  X2=(char)(temp3   ^   temp10);  
  X3=(char)(temp2   ^   temp9);  
  }  
  else{  
  X2=(char)(temp2   ^   temp9);  
  X3=(char)(temp3   ^   temp10);  
  }  
  X4=(char)(temp4   ^   temp9);  
  }//end   of   8   times  
   
  //输出变换  
  X1=multiply(Z_1[49],X1);  
  X2+=Z_1[50];  
  X3+=Z_1[51];  
  X4=multiply(Z_1[52],X4);  
   
  //把X1,X2,X3,X4复制到c_string中。  
  //now,creat   c_string   from   X1..X4;  
  c_string[1]=(byte)X1; c_string[0]=(byte)(X1>>8);  
  c_string[3]=(byte)X2; c_string[2]=(byte)(X2>>8);  
  c_string[5]=(byte)X3; c_string[4]=(byte)(X3>>8);  
  c_string[7]=(byte)X4; c_string[6]=(byte)(X4>>8);  
  //end   of   decryption  
  }  
   
  /**   结果输出  
    *   @param   output_c_string   output   the   result  
    *   @return   No   return   value  
    */  
  void   Get_c(byte[]   output_c_string)  
  {  
  //本函数的目的是获得目标数据  
  for   (int   i=0;i<=7;i++)   output_c_string[i]=c_string[i];  
  }  
   
  }  
   
  /*test   below*/  
  public   class   ideatest{  
  public   static   void   main(String[]   args){  
  int   i;  
  myidea   test=new   myidea();  
  byte[]   m={1,2,3,4,5,6,7,8};  
  byte[]   k={9,8,7,6,5,4,3,2,1,0,1,2,3,4,5,6};  
  byte[]   c=new   byte[8];  
  test.Set_k(k);  
  test.Creat_encrypt_sub_k();  
  test.Creat_decrypt_sub_k();  
  System.out.println("密钥:");  
  for(i=0;i<=15;i++)  
  System.out.print(k[i]);  
  System.out.println("");  
   
  test.Set_m(m);  
  System.out.println("明文:");  
  for(i=0;i<=7;i++)  
  System.out.print(m[i]);  
  System.out.println("");  
   
  test.Encrypt();  
  test.Get_c(c);  
  System.out.println("密文:");  
  for(i=0;i<=7;i++)  
  System.out.print((int)(c[i])+"   ");  
  System.out.println("");  
   
  test.Set_m(c);  
  test.Decrypt();  
  test.Get_c(c);  
  System.out.println("解密后明文:");  
  for(i=0;i<=7;i++)  
  System.out.print(c[i]);  
  System.out.println("");  
   
   
  System.out.println("hello!");  
  }  
 


 ·咋做    »显示摘要«
    摘要: response.write( "<a href=some.asp>" &rs2("username") & "</a><br>") 我想写成 response.write( "<a href="views.asp?id=<"rs2(id......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE