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

📄 md2digest.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   MD2Digest.java

package org.bouncycastle.crypto.digests;

import org.bouncycastle.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;
		}

	}

}

⌨️ 快捷键说明

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