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

📄 sha0.java

📁 jpeg2000编解码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        byte buf[] = new byte[HASH_LENGTH];        // Big endian        int off = 0;        for (int i = 0; i < HASH_LENGTH/4; ++i) {            int d = digest[i];            buf[off++] = (byte) (d>>>24);            buf[off++] = (byte) (d>>>16);            buf[off++] = (byte) (d>>>8);            buf[off++] = (byte)  d;        }        return buf;    }// SHA-0 transform routines//...........................................................................    private static int f1(int a, int b, int c) { return (c^(a&(b^c))) + 0x5A827999; }    private static int f2(int a, int b, int c) { return (a^b^c) + 0x6ED9EBA1; }    private static int f3(int a, int b, int c) { return ((a&b)|(c&(a|b))) + 0x8F1BBCDC; }    private static int f4(int a, int b, int c) { return (a^b^c) + 0xCA62C1D6; }    private void transform (int[] X)    {        int A = digest[0];        int B = digest[1];        int C = digest[2];        int D = digest[3];        int E = digest[4];        int W[] = w;        for (int i=0; i<16; i++)        {            W[i] = X[i];        }        for (int i=16; i<80; i++)        {            int j = W[i-16] ^ W[i-14] ^ W[i-8] ^ W[i-3];            W[i] = j;//            if (revised)//                W[i] = (j << 1) | (j >>> -1);        }        E += ((A << 5)|(A >>> -5)) + f1(B, C, D) + W[0]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f1(A, B, C) + W[1]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f1(E, A, B) + W[2]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f1(D, E, A) + W[3]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f1(C, D, E) + W[4]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f1(B, C, D) + W[5]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f1(A, B, C) + W[6]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f1(E, A, B) + W[7]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f1(D, E, A) + W[8]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f1(C, D, E) + W[9]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f1(B, C, D) + W[10]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f1(A, B, C) + W[11]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f1(E, A, B) + W[12]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f1(D, E, A) + W[13]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f1(C, D, E) + W[14]; C =((C << 30)|(C >>> -30));// System.out.println("A = "+Integer.toString(A, 16));// System.out.println("B = "+Integer.toString(B, 16));// System.out.println("C = "+Integer.toString(C, 16));// System.out.println("D = "+Integer.toString(D, 16));// System.out.println("E = "+Integer.toString(E, 16));// System.out.println("W[15] = "+Integer.toString(W[15], 16));// System.out.println("W[16] = "+Integer.toString(W[16], 16));// System.out.println("W[17] = "+Integer.toString(W[17], 16));// System.out.println("W[18] = "+Integer.toString(W[18], 16));// System.out.println("W[19] = "+Integer.toString(W[19], 16));        E += ((A << 5)|(A >>> -5)) + f1(B, C, D) + W[15]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f1(A, B, C) + W[16]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f1(E, A, B) + W[17]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f1(D, E, A) + W[18]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f1(C, D, E) + W[19]; C =((C << 30)|(C >>> -30));// System.out.println("A = "+Integer.toString(A, 16));// System.out.println("B = "+Integer.toString(B, 16));// System.out.println("C = "+Integer.toString(C, 16));// System.out.println("D = "+Integer.toString(D, 16));// System.out.println("E = "+Integer.toString(E, 16));        E += ((A << 5)|(A >>> -5)) + f2(B, C, D) + W[20]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f2(A, B, C) + W[21]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f2(E, A, B) + W[22]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f2(D, E, A) + W[23]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f2(C, D, E) + W[24]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f2(B, C, D) + W[25]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f2(A, B, C) + W[26]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f2(E, A, B) + W[27]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f2(D, E, A) + W[28]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f2(C, D, E) + W[29]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f2(B, C, D) + W[30]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f2(A, B, C) + W[31]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f2(E, A, B) + W[32]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f2(D, E, A) + W[33]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f2(C, D, E) + W[34]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f2(B, C, D) + W[35]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f2(A, B, C) + W[36]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f2(E, A, B) + W[37]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f2(D, E, A) + W[38]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f2(C, D, E) + W[39]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f3(B, C, D) + W[40]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f3(A, B, C) + W[41]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f3(E, A, B) + W[42]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f3(D, E, A) + W[43]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f3(C, D, E) + W[44]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f3(B, C, D) + W[45]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f3(A, B, C) + W[46]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f3(E, A, B) + W[47]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f3(D, E, A) + W[48]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f3(C, D, E) + W[49]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f3(B, C, D) + W[50]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f3(A, B, C) + W[51]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f3(E, A, B) + W[52]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f3(D, E, A) + W[53]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f3(C, D, E) + W[54]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f3(B, C, D) + W[55]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f3(A, B, C) + W[56]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f3(E, A, B) + W[57]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f3(D, E, A) + W[58]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f3(C, D, E) + W[59]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f4(B, C, D) + W[60]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f4(A, B, C) + W[61]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f4(E, A, B) + W[62]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f4(D, E, A) + W[63]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f4(C, D, E) + W[64]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f4(B, C, D) + W[65]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f4(A, B, C) + W[66]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f4(E, A, B) + W[67]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f4(D, E, A) + W[68]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f4(C, D, E) + W[69]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f4(B, C, D) + W[70]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f4(A, B, C) + W[71]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f4(E, A, B) + W[72]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f4(D, E, A) + W[73]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f4(C, D, E) + W[74]; C =((C << 30)|(C >>> -30));        E += ((A << 5)|(A >>> -5)) + f4(B, C, D) + W[75]; B =((B << 30)|(B >>> -30));        D += ((E << 5)|(E >>> -5)) + f4(A, B, C) + W[76]; A =((A << 30)|(A >>> -30));        C += ((D << 5)|(D >>> -5)) + f4(E, A, B) + W[77]; E =((E << 30)|(E >>> -30));        B += ((C << 5)|(C >>> -5)) + f4(D, E, A) + W[78]; D =((D << 30)|(D >>> -30));        A += ((B << 5)|(B >>> -5)) + f4(C, D, E) + W[79]; C =((C << 30)|(C >>> -30));// System.out.println("A = "+Integer.toString(A, 16));// System.out.println("B = "+Integer.toString(B, 16));// System.out.println("C = "+Integer.toString(C, 16));// System.out.println("D = "+Integer.toString(D, 16));// System.out.println("E = "+Integer.toString(E, 16));        digest[0] += A;        digest[1] += B;        digest[2] += C;        digest[3] += D;        digest[4] += E;// for (int i=0; i<5; i++) { System.out.println("X["+i+"] = "+Integer.toString(digest[i], 16)); }    }    // why was this public?    // Note: parameter order changed to be consistent with System.arraycopy.    private static void byte2int(byte[] src, int srcOffset,                                 int[] dst, int dstOffset, int length)    {        while (length-- > 0)        {            // Big endian            dst[dstOffset++] = (src[srcOffset++]         << 24) |                               ((src[srcOffset++] & 0xFF) << 16) |                               ((src[srcOffset++] & 0xFF) <<  8) |                                (src[srcOffset++] & 0xFF);        }    }// // // // // // // // // // // //   T E S T   // // // // // // // ///** * Entry point for <code>self_test</code>. */public static final voidmain(String argv[]){        try { self_test(); }        catch(Throwable t) { t.printStackTrace(); System.exit(1);}}//// Using Hex format 0xAB results in needing casts.//private static String[] texts ={  "",                                 // val data 1  "abc",                              // val data 1  "message digest",                   // val data 6}; private static byte[][] hashs ={ {-7,108,-22,25,-118,-47,-35,86,23,-84,8,74,61,-110,-58,16,119,8,-64,-17,}, {1,100,-72,-87,20,-51,42,94,116,-60,-9,-1,8,44,77,-105,-15,-19,-8,-128,}, {-63,-80,-14,34,-47,80,-21,-71,-86,54,-92,12,-81,-36,-117,-53,-19,-125,11,20,},}; /** * Do some basic tests. * Three of the validation data are included only, no output, * success or exception. * If you want more, write a test program! * @see cryptix.test.TestSHA0 */     public static final voidself_test()throws Exception{    int length = hashs[0].length;     for (int i = 0; i < texts.length; i++)    {        SHA0 hash = new SHA0();        byte[] text = texts[i].getBytes();        for (int j = 0; j < texts[i].length(); j++)            hash.engineUpdate(text[j]);        if (notEquals(hash.engineDigest(), hashs[i]))            throw new Exception("hash #"+ i +" failed");    }       }            private static final booleannotEquals(byte[] a, byte[] b) {    for (int i = 0; i < a.length; i++)    {               if (a[i] != b[i])            return true;        // if (a[i] == -125) // force a trip up        //     return true;    }    return false; }}

⌨️ 快捷键说明

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