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

📄 sha1digest.java

📁 进行与数字证书相关开发必须的java源码
💻 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:   SHA1Digest.java

package jit.crypto.digests;


// Referenced classes of package jit.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 & (long)-1);
    }

    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;

    }

    static 
    {
        DIGEST_LENGTH = 20;
        Y1 = 0x5a827999;
        Y2 = 0x6ed9eba1;
        Y3 = 0x8f1bbcdc;
        Y4 = 0xca62c1d6;
    }
}

⌨️ 快捷键说明

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