⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5.java

📁 Enclosed in this distribution are four projects: MD5DLLTest: Visual basic project which runs the
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

  private static long ff(long lngA,
	 		long lngB, 
			long lngC,
			long lngD,
			long lngX,
			long lngS,
			long lngAC)
  {
	lngA = (lngA + (lngB & lngC | (~lngB) & lngD) + lngX + lngAC) & 0xFFFFFFFFL;
	lngA = ((lngA << lngS) | (lngA >>> (32L-lngS))) & 0xFFFFFFFFL;
	lngA = (lngA + lngB) & 0xFFFFFFFFL;
	return(lngA);
  }




  private static long gg(long lngA,
	 		long lngB, 
			long lngC,
			long lngD,
			long lngX,
			long lngS,
			long lngAC)
  {
	lngA = (lngA +  (lngB & lngD | lngC & ~lngD) + lngX + lngAC) & 0xFFFFFFFFL;
	lngA = ((lngA << lngS) | (lngA >>> (32L-lngS))) & 0xFFFFFFFFL;
	lngA = (lngA + lngB) & 0xFFFFFFFFL;
	return(lngA);
  }

 private static long hh(long lngA,
	 		long lngB, 
			long lngC,
			long lngD,
			long lngX,
			long lngS,
			long lngAC)
  {
	lngA = (lngA + (lngB ^ lngC ^ lngD) + lngX + lngAC) & 0xFFFFFFFFL;
	lngA = ((lngA << lngS) | (lngA >>> (32L-lngS))) & 0xFFFFFFFFL;
	lngA = (lngA + lngB) & 0xFFFFFFFFL;
	return(lngA);
  }

 private static long ii(long lngA,
	 		long lngB, 
			long lngC,
			long lngD,
			long lngX,
			long lngS,
			long lngAC)
  {
	lngA = (lngA + (lngC ^ (lngB | ~lngD)) + lngX + lngAC) & 0xFFFFFFFFL;
	lngA = ((lngA << lngS) | (lngA >>> (32L-lngS))) & 0xFFFFFFFFL;
	lngA = (lngA + lngB) & 0xFFFFFFFFL;
	return(lngA);
  }


  private void update(char bytInput[], long lngLen)
  {
    int index = (int)( this.lngByteCount % 64);
    int i = 0;
    this.lngByteCount += lngLen;
    int partLen = 64 - index;
    
    if (lngLen >= partLen) 
    {
      for (int j = 0; j < partLen; ++j) 
      {
        this.bytBuffer[j + index] = bytInput[j]; 
      }
      transform (this.lngState, this.bytBuffer);

      for (i = partLen; i + 63 < lngLen; i += 64)
      {
      	for (int j = 0; j<64; ++j) 
      	{
          this.bytBuffer[j] = bytInput[j+i]; 
        }	
        transform (this.lngState, this.bytBuffer);
      }
      index = 0;
    }
    else
    {
      i = 0;
    }

    for (int j = 0; j < lngLen - i; ++j) 
    {  
      this.bytBuffer[index + j] = bytInput[i + j];
    }
    
  }

  public void md5final()
  {
    char bytBits[] = new char[8];
    int index, padLen;
    long bits = this.lngByteCount * 8;
    
    bytBits[0] = (char) (bits & 0xffL);
    bytBits[1] = (char) ((bits >>> 8) & 0xffL);
    bytBits[2] = (char) ((bits >>> 16) & 0xffL);
    bytBits[3] = (char)((bits >>> 24) & 0xffL);
    bytBits[4] = (char)((bits >>> 32) & 0xffL);
    bytBits[5] = (char)((bits >>> 40) & 0xffL);
    bytBits[6] = (char)((bits >>> 48) & 0xffL);
    bytBits[7] = (char)((bits >>> 56) & 0xffL);
 
    index = (int) this.lngByteCount%64;
    if (index < 56 )
    {
      padLen = 56 - index;
    }
    else
    {
      padLen = 120 - index;
    }
    update(pad, padLen);
    update(bytBits, 8);	    

  }

  private StringBuffer toHexString()
  {
    long myByte = 0;
    StringBuffer mystring = new StringBuffer();
    for (int j = 0; j < 4; ++j)
    {
      for (int i = 0; i < 32; i += 8)
      {
         myByte = (this.lngState[j] >>> i) & 0xFFL;
         if (myByte < 16)
         {
           mystring.append("0" + Long.toHexString(myByte));
         }
         else
         {
           mystring.append(Long.toHexString(myByte)); 
         }
      }
    }
    return(mystring);
  }

  public void init()
  {
	this.lngByteCount = 0;
  	this.lngState[0] = 0x67452301L;
  	this.lngState[1] = 0xefcdab89L;
  	this.lngState[2] = 0x98badcfeL;
  	this.lngState[3] = 0x10325476L;
  }



  //
  // MAIN routine with test data set
  //
  public static void main (String args [])
       throws IOException
  {

    String strTestData;
    char chrTestData[] = new char[64];
    char chrTestBuffer[] = new char[1000];
    MD5 md5Test = new MD5();

    strTestData = new String("");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );

    md5Test.init();
    strTestData = new String("a");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );
  
    md5Test.init();
    strTestData = new String("abc");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );

    md5Test.init();
    strTestData = new String("message digest");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );

    md5Test.init();
    strTestData = new String("abcdefghijklmnopqrstuvwxyz");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );

    md5Test.init();
    strTestData = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );

    md5Test.init();
    strTestData = new String("12345678901234567890123456789012345678901234567890123456789012345678901234567890");
    chrTestData = strTestData.toCharArray();    
    md5Test.update(chrTestData,chrTestData.length);    
    md5Test.md5final();
    System.out.println("MD5 (" + strTestData +") = " + md5Test.toHexString() );


    for (int i = 0; i < chrTestBuffer.length; ++i)
    {
    	chrTestBuffer[i] = (char) (i & 0xff);
    }

    long time1 = System.currentTimeMillis();
    md5Test.init();
    for (int i = 0; i < 100000; ++i) 
    {
      md5Test.update(chrTestBuffer,chrTestBuffer.length);
    }
    md5Test.md5final();
    long time2 = (System.currentTimeMillis() - time1)/1000;
    System.out.println("MD5 Speed Test: " + time2 + "sec = " + md5Test.toHexString() );

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -