[转载]MD5算法之C#程序 MD5算法描述[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 austinlei 的 blog

      size=n-m+64;
    }
    else if (m==56){
      zeros = 0;
      ones = 0;
      size=n+8;
    }
    else{
      zeros = 63-m+56;
      size=n+64-m+64;
    }

    arraylist bs = new arraylist(input);
    if(ones==1){
      bs.add( (byte)0x80 ); // 0x80 = $10000000
    }
    for(int i=0;i<zeros;i++){
      bs.add( (byte)0 );
    }

    uint64 n = (uint64) n * 8;
    byte h1=(byte)(n&0xff);
    byte h2=(byte)((n>>8)&0xff);
    byte h3=(byte)((n>>16)&0xff);
    byte h4=(byte)((n>>24)&0xff);
    byte h5=(byte)((n>>32)&0xff);
    byte h6=(byte)((n>>40)&0xff);
    byte h7=(byte)((n>>48)&0xff);
    byte h8=(byte)(n>>56);
    bs.add(h1);
    bs.add(h2);
    bs.add(h3);
    bs.add(h4);
    bs.add(h5);
    bs.add(h6);
    bs.add(h7);
    bs.add(h8);
    byte[] ts=(byte[])bs.toarray(typeof(byte));

    /* decodes input (byte[]) into output (uint32[]). assumes len is
     * a multiple of 4.
     */
    uint32[] output = new uint32[size/4];
    for(int64 i=0,j=0;i<size;j++,i+=4){
      output[j]=(uint32)(ts[i] | ts[i+1]<<8 | ts[i+2]<<16 | ts[i+3]<<24);
    }
    return output;
  }
  private static uint32[] md5_trasform(uint32[] x){

    uint32 a,b,c,d;

    for(int k=0;k<x.length;k+=16){
      a=a;
      b=b;
      c=c;
      d=d;
   
      /* round 1 */
      ff (ref a, b, c, d, x[k+ 0], s11, 0xd76aa478); /* 1 */
      ff (ref d, a, b, c, x[k+ 1], s12, 0xe8c7b756); /* 2 */
      ff (ref c, d, a, b, x[k+ 2], s13, 0x242070db); /* 3 */
      ff (ref b, c, d, a, x[k+ 3], s14, 0xc1bdceee); /* 4 */
      ff (ref a, b, c, d, x[k+ 4], s11, 0xf57c0faf); /* 5 */
      ff (ref d, a, b, c, x[k+ 5], s12, 0x4787c62a); /* 6 */
      ff (ref c, d, a, b, x[k+ 6], s13, 0xa8304613); /* 7 */
      ff (ref b, c, d, a, x[k+ 7], s14, 0xfd469501); /* 8 */
      ff (ref a, b, c, d, x[k+ 8], s11, 0x698098d8); /* 9 */
      ff (ref d, a, b, c, x[k+ 9], s12, 0x8b44f7af); /* 10 */
      ff (ref c, d, a, b, x[k+10], s13, 0xffff5bb1); /* 11 */
      ff (ref b, c, d, a, x[k+11], s14, 0x895cd7be); /* 12 */
      ff (ref a, b, c, d, x[k+12], s11, 0x6b901122); /* 13 */
      ff (ref d, a, b, c, x[k+13], s12, 0xfd987193); /* 14 */
      ff (ref c, d, a, b, x[k+14], s13, 0xa679438e); /* 15 */
      ff (ref b, c, d, a, x[k+15], s14, 0x49b40821); /* 16 */

      /* round 2 */
      gg (ref a, b, c, d, x[k+ 1], s21, 0xf61e2562); /* 17 */
      gg (ref d, a, b, c, x[k+ 6], s22, 0xc040b340); /* 18 */
      gg (ref c, d, a, b, x[k+11], s23, 0x265e5a51); /* 19 */
      gg (ref b, c, d, a, x[k+ 0], s24, 0xe9b6c7aa); /* 20 */
      gg (ref a, b, c, d, x[k+ 5], s21, 0xd62f105d); /* 21 */
      gg (ref d, a, b, c, x[k+10], s22,  0x2441453); /* 22 */
      gg (ref c, d, a, b, x[k+15], s23, 0xd8a1e681); /* 23 */
      gg (ref b, c, d, a, x[k+ 4], s24, 0xe7d3fbc8); /* 24 */
      gg (ref a, b, c, d, x[k+ 9], s21, 0x21e1cde6); /* 25 */
      gg (ref d, a, b, c, x[k+14], s22, 0xc33707d6); /* 26 */
      gg (ref c, d, a, b, x[k+ 3], s23, 0xf4d50d87); /* 27 */

本文关键:[转载]MD5算法之C#程序 MD5算法描述
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top