📄 md5.java
字号:
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 + -