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

📄 md2digest.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:   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 + -