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

📄 sha1digest.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:   SHA1Digest.java

package org.bouncycastle.crypto.digests;


// Referenced classes of package org.bouncycastle.crypto.digests:
//			GeneralDigest

public class SHA1Digest extends GeneralDigest
{

	private static final int DIGEST_LENGTH = 20;
	private int H1;
	private int H2;
	private int H3;
	private int H4;
	private int H5;
	private int X[];
	private int xOff;
	private static final int Y1 = 0x5a827999;
	private static final int Y2 = 0x6ed9eba1;
	private static final int Y3 = 0x8f1bbcdc;
	private static final int Y4 = 0xca62c1d6;

	public SHA1Digest()
	{
		X = new int[80];
		reset();
	}

	public SHA1Digest(SHA1Digest t)
	{
		super(t);
		X = new int[80];
		H1 = t.H1;
		H2 = t.H2;
		H3 = t.H3;
		H4 = t.H4;
		H5 = t.H5;
		System.arraycopy(t.X, 0, X, 0, t.X.length);
		xOff = t.xOff;
	}

	public String getAlgorithmName()
	{
		return "SHA-1";
	}

	public int getDigestSize()
	{
		return 20;
	}

	protected void processWord(byte in[], int inOff)
	{
		X[xOff++] = (in[inOff] & 0xff) << 24 | (in[inOff + 1] & 0xff) << 16 | (in[inOff + 2] & 0xff) << 8 | in[inOff + 3] & 0xff;
		if (xOff == 16)
			processBlock();
	}

	private void unpackWord(int word, byte out[], int outOff)
	{
		out[outOff] = (byte)(word >>> 24);
		out[outOff + 1] = (byte)(word >>> 16);
		out[outOff + 2] = (byte)(word >>> 8);
		out[outOff + 3] = (byte)word;
	}

	protected void processLength(long bitLength)
	{
		if (xOff > 14)
			processBlock();
		X[14] = (int)(bitLength >>> 32);
		X[15] = (int)(bitLength & -1L);
	}

	public int doFinal(byte out[], int outOff)
	{
		finish();
		unpackWord(H1, out, outOff);
		unpackWord(H2, out, outOff + 4);
		unpackWord(H3, out, outOff + 8);
		unpackWord(H4, out, outOff + 12);
		unpackWord(H5, out, outOff + 16);
		reset();
		return 20;
	}

	public void reset()
	{
		super.reset();
		H1 = 0x67452301;
		H2 = 0xefcdab89;
		H3 = 0x98badcfe;
		H4 = 0x10325476;
		H5 = 0xc3d2e1f0;
		xOff = 0;
		for (int i = 0; i != X.length; i++)
			X[i] = 0;

	}

	private int f(int u, int v, int w)
	{
		return u & v | ~u & w;
	}

	private int h(int u, int v, int w)
	{
		return u ^ v ^ w;
	}

	private int g(int u, int v, int w)
	{
		return u & v | u & w | v & w;
	}

	private int rotateLeft(int x, int n)
	{
		return x << n | x >>> 32 - n;
	}

	protected void processBlock()
	{
		for (int i = 16; i <= 79; i++)
			X[i] = rotateLeft(X[i - 3] ^ X[i - 8] ^ X[i - 14] ^ X[i - 16], 1);

		int A = H1;
		int B = H2;
		int C = H3;
		int D = H4;
		int E = H5;
		for (int j = 0; j <= 19; j++)
		{
			int t = rotateLeft(A, 5) + f(B, C, D) + E + X[j] + 0x5a827999;
			E = D;
			D = C;
			C = rotateLeft(B, 30);
			B = A;
			A = t;
		}

		for (int j = 20; j <= 39; j++)
		{
			int t = rotateLeft(A, 5) + h(B, C, D) + E + X[j] + 0x6ed9eba1;
			E = D;
			D = C;
			C = rotateLeft(B, 30);
			B = A;
			A = t;
		}

		for (int j = 40; j <= 59; j++)
		{
			int t = rotateLeft(A, 5) + g(B, C, D) + E + X[j] + 0x8f1bbcdc;
			E = D;
			D = C;
			C = rotateLeft(B, 30);
			B = A;
			A = t;
		}

		for (int j = 60; j <= 79; j++)
		{
			int t = rotateLeft(A, 5) + h(B, C, D) + E + X[j] + 0xca62c1d6;
			E = D;
			D = C;
			C = rotateLeft(B, 30);
			B = A;
			A = t;
		}

		H1 += A;
		H2 += B;
		H3 += C;
		H4 += D;
		H5 += E;
		xOff = 0;
		for (int i = 0; i != X.length; i++)
			X[i] = 0;

	}
}

⌨️ 快捷键说明

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