📄 md2digest.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: MD2Digest.java
package jit.crypto.digests;
import jit.crypto.Digest;
public class MD2Digest
implements Digest
{
private static final int DIGEST_LENGTH = 16;
private byte X[];
private int xOff;
private byte M[];
private int mOff;
private byte C[];
private int COff;
private static final byte S[] = {
41, 46, 67, -55, -94, -40, 124, 1, 61, 54,
84, -95, -20, -16, 6, 19, 98, -89, 5, -13,
-64, -57, 115, -116, -104, -109, 43, -39, -68, 76,
-126, -54, 30, -101, 87, 60, -3, -44, -32, 22,
103, 66, 111, 24, -118, 23, -27, 18, -66, 78,
-60, -42, -38, -98, -34, 73, -96, -5, -11, -114,
-69, 47, -18, 122, -87, 104, 121, -111, 21, -78,
7, 63, -108, -62, 16, -119, 11, 34, 95, 33,
-128, 127, 93, -102, 90, -112, 50, 39, 53, 62,
-52, -25, -65, -9, -105, 3, -1, 25, 48, -77,
72, -91, -75, -47, -41, 94, -110, 42, -84, 86,
-86, -58, 79, -72, 56, -46, -106, -92, 125, -74,
118, -4, 107, -30, -100, 116, 4, -15, 69, -99,
112, 89, 100, 113, -121, 32, -122, 91, -49, 101,
-26, 45, -88, 2, 27, 96, 37, -83, -82, -80,
-71, -10, 28, 70, 97, 105, 52, 64, 126, 15,
85, 71, -93, 35, -35, 81, -81, 58, -61, 92,
-7, -50, -70, -59, -22, 38, 44, 83, 13, 110,
-123, 40, -124, 9, -45, -33, -51, -12, 65, -127,
77, 82, 106, -36, 55, -56, 108, -63, -85, -6,
36, -31, 123, 8, 12, -67, -79, 74, 120, -120,
-107, -117, -29, 99, -24, 109, -23, -53, -43, -2,
59, 0, 29, 57, -14, -17, -73, 14, 102, 88,
-48, -28, -90, 119, 114, -8, -21, 117, 75, 10,
49, 68, 80, -76, -113, -19, 31, 26, -37, -103,
-115, 51, -97, 17, -125, 20
};
public MD2Digest()
{
X = new byte[48];
M = new byte[16];
C = new byte[16];
reset();
}
public MD2Digest(MD2Digest t)
{
X = new byte[48];
M = new byte[16];
C = new byte[16];
System.arraycopy(t.X, 0, X, 0, t.X.length);
xOff = t.xOff;
System.arraycopy(t.M, 0, M, 0, t.M.length);
mOff = t.mOff;
System.arraycopy(t.C, 0, C, 0, t.C.length);
COff = t.COff;
}
public String getAlgorithmName()
{
return "MD2";
}
public int getDigestSize()
{
return 16;
}
public int doFinal(byte out[], int outOff)
{
byte paddingByte = (byte)(M.length - mOff);
for(int i = mOff; i < M.length; i++)
M[i] = paddingByte;
processCheckSum(M);
processBlock(M);
processBlock(C);
System.arraycopy(X, xOff, out, outOff, 16);
reset();
return 16;
}
public void reset()
{
xOff = 0;
for(int i = 0; i != X.length; i++)
X[i] = 0;
mOff = 0;
for(int i = 0; i != M.length; i++)
M[i] = 0;
COff = 0;
for(int i = 0; i != C.length; i++)
C[i] = 0;
}
public void update(byte in)
{
M[mOff++] = in;
if(mOff == 16)
{
processCheckSum(M);
processBlock(M);
mOff = 0;
}
}
public void update(byte in[], int inOff, int len)
{
for(; mOff != 0 && len > 0; len--)
{
update(in[inOff]);
inOff++;
}
while(len > 16)
{
System.arraycopy(in, inOff, M, 0, 16);
processCheckSum(M);
processBlock(M);
len -= 16;
inOff += 16;
}
for(; len > 0; len--)
{
update(in[inOff]);
inOff++;
}
}
protected void processCheckSum(byte m[])
{
int L = C[15];
for(int i = 0; i < 16; i++)
{
C[i] ^= S[(m[i] ^ L) & 0xff];
L = C[i];
}
}
protected void processBlock(byte m[])
{
for(int i = 0; i < 16; i++)
{
X[i + 16] = m[i];
X[i + 32] = (byte)(m[i] ^ X[i]);
}
int t = 0;
for(int j = 0; j < 18; j++)
{
for(int k = 0; k < 48; k++)
{
t = X[k] ^= S[t];
t &= 0xff;
}
t = (t + j) % 256;
}
}
static
{
DIGEST_LENGTH = 16;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -