亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? twofishengine.java

?? 內容:基于jdk1.4的加密算法的具體實現
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
        int[] k32e = new int[MAX_KEY_BITS/64]; // 4        int[] k32o = new int[MAX_KEY_BITS/64]; // 4         int[] sBoxKeys = new int[MAX_KEY_BITS/64]; // 4         gSubKeys = new int[TOTAL_SUBKEYS];        if (k64Cnt < 1)         {            throw new IllegalArgumentException("Key size less than 64 bits");        }                if (k64Cnt > 4)        {            throw new IllegalArgumentException("Key size larger than 256 bits");        }        /*         * k64Cnt is the number of 8 byte blocks (64 chunks)         * that are in the input key.  The input key is a         * maximum of 32 bytes (256 bits), so the range         * for k64Cnt is 1..4         */        for (int i=0; i<k64Cnt ; i++)        {            int p = i* 8;            k32e[i] = BytesTo32Bits(key, p);            k32o[i] = BytesTo32Bits(key, p+4);            sBoxKeys[k64Cnt-1-i] = RS_MDS_Encode(k32e[i], k32o[i]);        }        int q,A,B;        for (int i=0; i < TOTAL_SUBKEYS / 2 ; i++)         {            q = i*SK_STEP;            A = F32(q,         k32e);            B = F32(q+SK_BUMP, k32o);            B = B << 8 | B >>> 24;            A += B;            gSubKeys[i*2] = A;            A += B;            gSubKeys[i*2 + 1] = A << SK_ROTL | A >>> (32-SK_ROTL);        }        /*         * fully expand the table for speed         */        int k0 = sBoxKeys[0];        int k1 = sBoxKeys[1];        int k2 = sBoxKeys[2];        int k3 = sBoxKeys[3];        int b0, b1, b2, b3;        gSBox = new int[4*MAX_KEY_BITS];        for (int i=0; i<MAX_KEY_BITS; i++)        {            b0 = b1 = b2 = b3 = i;            switch (k64Cnt & 3)            {                case 1:                    gSBox[i*2]       = gMDS0[(P[P_01][b0] & 0xff) ^ b0(k0)];                    gSBox[i*2+1]     = gMDS1[(P[P_11][b1] & 0xff) ^ b1(k0)];                    gSBox[i*2+0x200] = gMDS2[(P[P_21][b2] & 0xff) ^ b2(k0)];                    gSBox[i*2+0x201] = gMDS3[(P[P_31][b3] & 0xff) ^ b3(k0)];                break;                case 0: /* 256 bits of key */                    b0 = (P[P_04][b0] & 0xff) ^ b0(k3);                    b1 = (P[P_14][b1] & 0xff) ^ b1(k3);                    b2 = (P[P_24][b2] & 0xff) ^ b2(k3);                    b3 = (P[P_34][b3] & 0xff) ^ b3(k3);                case 3:                     b0 = (P[P_03][b0] & 0xff) ^ b0(k2);                    b1 = (P[P_13][b1] & 0xff) ^ b1(k2);                    b2 = (P[P_23][b2] & 0xff) ^ b2(k2);                    b3 = (P[P_33][b3] & 0xff) ^ b3(k2);                case 2:                    gSBox[i*2]   = gMDS0[(P[P_01]                        [(P[P_02][b0] & 0xff) ^ b0(k1)] & 0xff) ^ b0(k0)];                    gSBox[i*2+1] = gMDS1[(P[P_11]                        [(P[P_12][b1] & 0xff) ^ b1(k1)] & 0xff) ^ b1(k0)];                    gSBox[i*2+0x200] = gMDS2[(P[P_21]                        [(P[P_22][b2] & 0xff) ^ b2(k1)] & 0xff) ^ b2(k0)];                    gSBox[i*2+0x201] = gMDS3[(P[P_31]                        [(P[P_32][b3] & 0xff) ^ b3(k1)] & 0xff) ^ b3(k0)];                break;            }        }        /*          * the function exits having setup the gSBox with the          * input key material.         */    }    /**     * Encrypt the given input starting at the given offset and place     * the result in the provided buffer starting at the given offset.     * The input will be an exact multiple of our blocksize.     *     * encryptBlock uses the pre-calculated gSBox[] and subKey[]     * arrays.     */    private void encryptBlock(        byte[] src,         int srcIndex,        byte[] dst,        int dstIndex)    {        int x0 = BytesTo32Bits(src, srcIndex) ^ gSubKeys[INPUT_WHITEN];        int x1 = BytesTo32Bits(src, srcIndex + 4) ^ gSubKeys[INPUT_WHITEN + 1];        int x2 = BytesTo32Bits(src, srcIndex + 8) ^ gSubKeys[INPUT_WHITEN + 2];        int x3 = BytesTo32Bits(src, srcIndex + 12) ^ gSubKeys[INPUT_WHITEN + 3];        int k = ROUND_SUBKEYS;        int t0, t1;        for (int r = 0; r < ROUNDS; r +=2)        {            t0 = Fe32_0(x0);            t1 = Fe32_3(x1);            x2 ^= t0 + t1 + gSubKeys[k++];            x2 = x2 >>>1 | x2 << 31;            x3 = (x3 << 1 | x3 >>> 31) ^ (t0 + 2*t1 + gSubKeys[k++]);            t0 = Fe32_0(x2);            t1 = Fe32_3(x3);            x0 ^= t0 + t1 + gSubKeys[k++];            x0 = x0 >>>1 | x0 << 31;            x1 = (x1 << 1 | x1 >>> 31) ^ (t0 + 2*t1 + gSubKeys[k++]);        }        Bits32ToBytes(x2 ^ gSubKeys[OUTPUT_WHITEN], dst, dstIndex);        Bits32ToBytes(x3 ^ gSubKeys[OUTPUT_WHITEN + 1], dst, dstIndex + 4);        Bits32ToBytes(x0 ^ gSubKeys[OUTPUT_WHITEN + 2], dst, dstIndex + 8);        Bits32ToBytes(x1 ^ gSubKeys[OUTPUT_WHITEN + 3], dst, dstIndex + 12);    }    /**     * Decrypt the given input starting at the given offset and place     * the result in the provided buffer starting at the given offset.     * The input will be an exact multiple of our blocksize.     */    private void decryptBlock(        byte[] src,         int srcIndex,        byte[] dst,        int dstIndex)    {        int x2 = BytesTo32Bits(src, srcIndex) ^ gSubKeys[OUTPUT_WHITEN];        int x3 = BytesTo32Bits(src, srcIndex+4) ^ gSubKeys[OUTPUT_WHITEN + 1];        int x0 = BytesTo32Bits(src, srcIndex+8) ^ gSubKeys[OUTPUT_WHITEN + 2];        int x1 = BytesTo32Bits(src, srcIndex+12) ^ gSubKeys[OUTPUT_WHITEN + 3];        int k = ROUND_SUBKEYS + 2 * ROUNDS -1 ;        int t0, t1;        for (int r = 0; r< ROUNDS ; r +=2)        {            t0 = Fe32_0(x2);            t1 = Fe32_3(x3);            x1 ^= t0 + 2*t1 + gSubKeys[k--];            x0 = (x0 << 1 | x0 >>> 31) ^ (t0 + t1 + gSubKeys[k--]);            x1 = x1 >>>1 | x1 << 31;            t0 = Fe32_0(x0);            t1 = Fe32_3(x1);            x3 ^= t0 + 2*t1 + gSubKeys[k--];            x2 = (x2 << 1 | x2 >>> 31) ^ (t0 + t1 + gSubKeys[k--]);            x3 = x3 >>>1 | x3 << 31;        }        Bits32ToBytes(x0 ^ gSubKeys[INPUT_WHITEN], dst, dstIndex);        Bits32ToBytes(x1 ^ gSubKeys[INPUT_WHITEN + 1], dst, dstIndex + 4);        Bits32ToBytes(x2 ^ gSubKeys[INPUT_WHITEN + 2], dst, dstIndex + 8);        Bits32ToBytes(x3 ^ gSubKeys[INPUT_WHITEN + 3], dst, dstIndex + 12);    }    /*      * TODO:  This can be optimised and made cleaner by combining     * the functionality in this function and applying it appropriately     * to the creation of the subkeys during key setup.     */    private final int F32(int x, int[] k32)    {        int b0 = b0(x);        int b1 = b1(x);        int b2 = b2(x);        int b3 = b3(x);        int k0 = k32[0];        int k1 = k32[1];        int k2 = k32[2];        int k3 = k32[3];        int result = 0;        switch (k64Cnt & 3)        {            case 1:                result = gMDS0[(P[P_01][b0] & 0xff) ^ b0(k0)] ^                         gMDS1[(P[P_11][b1] & 0xff) ^ b1(k0)] ^                         gMDS2[(P[P_21][b2] & 0xff) ^ b2(k0)] ^                         gMDS3[(P[P_31][b3] & 0xff) ^ b3(k0)];                break;            case 0: /* 256 bits of key */                b0 = (P[P_04][b0] & 0xff) ^ b0(k3);                b1 = (P[P_14][b1] & 0xff) ^ b1(k3);                b2 = (P[P_24][b2] & 0xff) ^ b2(k3);                b3 = (P[P_34][b3] & 0xff) ^ b3(k3);            case 3:                 b0 = (P[P_03][b0] & 0xff) ^ b0(k2);                b1 = (P[P_13][b1] & 0xff) ^ b1(k2);                b2 = (P[P_23][b2] & 0xff) ^ b2(k2);                b3 = (P[P_33][b3] & 0xff) ^ b3(k2);            case 2:                result =                 gMDS0[(P[P_01][(P[P_02][b0]&0xff)^b0(k1)]&0xff)^b0(k0)] ^                 gMDS1[(P[P_11][(P[P_12][b1]&0xff)^b1(k1)]&0xff)^b1(k0)] ^                gMDS2[(P[P_21][(P[P_22][b2]&0xff)^b2(k1)]&0xff)^b2(k0)] ^                gMDS3[(P[P_31][(P[P_32][b3]&0xff)^b3(k1)]&0xff)^b3(k0)];            break;        }        return result;    }    /**     * Use (12, 8) Reed-Solomon code over GF(256) to produce     * a key S-box 32-bit entity from 2 key material 32-bit     * entities.     *     * @param    k0 first 32-bit entity     * @param    k1 second 32-bit entity     * @return     Remainder polynomial generated using RS code     */    private final int RS_MDS_Encode(int k0, int k1)    {        int r = k1;        for (int i = 0 ; i < 4 ; i++) // shift 1 byte at a time        {            r = RS_rem(r);        }        r ^= k0;        for (int i=0 ; i < 4 ; i++)        {            r = RS_rem(r);        }        return r;    }    /**     * Reed-Solomon code parameters: (12,8) reversible code:<p>     * <pre>     * g(x) = x^4 + (a+1/a)x^3 + ax^2 + (a+1/a)x + 1     * </pre>     * where a = primitive root of field generator 0x14D     */    private final int RS_rem(int x)    {        int b = (x >>> 24) & 0xff;        int g2 = ((b << 1) ^                  ((b & 0x80) != 0 ? RS_GF_FDBK : 0)) & 0xff;        int g3 = ((b >>> 1) ^                  ((b & 0x01) != 0 ? (RS_GF_FDBK >>> 1) : 0)) ^ g2 ;        return ((x << 8) ^ (g3 << 24) ^ (g2 << 16) ^ (g3 << 8) ^ b);    }            private final int LFSR1(int x)    {        return (x >> 1) ^                 (((x & 0x01) != 0) ? GF256_FDBK_2 : 0);    }    private final int LFSR2(int x)    {        return (x >> 2) ^                (((x & 0x02) != 0) ? GF256_FDBK_2 : 0) ^                (((x & 0x01) != 0) ? GF256_FDBK_4 : 0);    }    private final int Mx_X(int x)    {        return x ^ LFSR2(x);    } // 5B    private final int Mx_Y(int x)    {        return x ^ LFSR1(x) ^ LFSR2(x);    } // EF    private final int b0(int x)    {        return x & 0xff;    }    private final int b1(int x)    {        return (x >>> 8) & 0xff;    }    private final int b2(int x)    {        return (x >>> 16) & 0xff;    }    private final int b3(int x)    {        return (x >>> 24) & 0xff;    }    private final int Fe32_0(int x)    {        return gSBox[ 0x000 + 2*(x & 0xff) ] ^               gSBox[ 0x001 + 2*((x >>> 8) & 0xff) ] ^               gSBox[ 0x200 + 2*((x >>> 16) & 0xff) ] ^               gSBox[ 0x201 + 2*((x >>> 24) & 0xff) ];    }        private final int Fe32_3(int x)    {        return gSBox[ 0x000 + 2*((x >>> 24) & 0xff) ] ^               gSBox[ 0x001 + 2*(x & 0xff) ] ^               gSBox[ 0x200 + 2*((x >>> 8) & 0xff) ] ^               gSBox[ 0x201 + 2*((x >>> 16) & 0xff) ];    }        private final int BytesTo32Bits(byte[] b, int p)    {        return ((b[p] & 0xff)) |              ((b[p+1] & 0xff) << 8) |             ((b[p+2] & 0xff) << 16) |             ((b[p+3] & 0xff) << 24);    }    private final void Bits32ToBytes(int in,  byte[] b, int offset)    {        b[offset] = (byte)in;        b[offset + 1] = (byte)(in >> 8);        b[offset + 2] = (byte)(in >> 16);        b[offset + 3] = (byte)(in >> 24);    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡免费追剧大全电视剧网站| 精品国产亚洲在线| 精品久久久久久久久久久院品网 | 日本不卡中文字幕| 亚洲欧美日韩国产一区二区三区| 久久久精品中文字幕麻豆发布| 日本一不卡视频| 日韩一区二区三区av| 麻豆国产精品777777在线| 日韩欧美你懂的| 国产传媒久久文化传媒| 国产精品你懂的| 色欧美乱欧美15图片| 亚洲成av人片在www色猫咪| 欧美一级理论性理论a| 国产一区二区三区电影在线观看| 国产情人综合久久777777| 92国产精品观看| 国产精品进线69影院| 色综合久久88色综合天天6 | 亚洲视频一二三| 欧美影院午夜播放| 久久成人久久鬼色| 国产精品久久777777| 欧美日韩久久不卡| 国产另类ts人妖一区二区| 亚洲久草在线视频| 日韩精品在线一区二区| 91网站黄www| 国模一区二区三区白浆| 一区二区欧美精品| 精品av久久707| 在线观看视频欧美| 国产精品一区二区x88av| 亚洲综合在线视频| 久久久久久一二三区| 欧美综合在线视频| 国产精品1区2区3区| 亚洲高清三级视频| 国产精品福利影院| 精品国精品国产| 在线精品视频一区二区三四| 久久机这里只有精品| 亚洲精品国产精华液| 日韩精品专区在线影院重磅| 狠狠色2019综合网| 国产精品无遮挡| 欧美xfplay| 色婷婷精品大在线视频| 免费观看在线综合| 亚洲人成网站影音先锋播放| 欧美一级片在线观看| 91日韩在线专区| 久久国产精品无码网站| 亚洲精品久久久蜜桃| 亚洲精品一线二线三线| 欧美在线一区二区三区| 成人亚洲一区二区一| 日本成人在线看| 亚洲日本va午夜在线影院| 精品国产一二三区| 国产精品你懂的在线| 99视频一区二区| 激情小说欧美图片| 五月天一区二区三区| 最新久久zyz资源站| 日韩一卡二卡三卡国产欧美| 91网上在线视频| 成人手机在线视频| 久久狠狠亚洲综合| 亚洲香肠在线观看| 国产精品久久777777| 精品国产免费一区二区三区香蕉| 91搞黄在线观看| 成人sese在线| 丁香桃色午夜亚洲一区二区三区| 日韩电影一二三区| 亚洲精品你懂的| 亚洲激情中文1区| 国产精品丝袜黑色高跟| 久久久久久97三级| 欧美大尺度电影在线| 这里只有精品免费| 91精品国产乱| 日韩免费看的电影| 91精品国产黑色紧身裤美女| 欧美日韩成人在线| 91精品1区2区| 欧美性受xxxx黑人xyx性爽| 91视频精品在这里| 一本在线高清不卡dvd| 97久久精品人人做人人爽50路| 成人性生交大合| 国产成人综合网| 国产成人综合在线播放| 国产精品99久久久久久久女警 | 亚洲免费观看高清完整| 国产精品免费人成网站| 精品成人在线观看| 精品国产麻豆免费人成网站| 5858s免费视频成人| 日韩欧美色电影| 26uuu精品一区二区| 26uuu久久天堂性欧美| 久久精品水蜜桃av综合天堂| 久久五月婷婷丁香社区| 激情六月婷婷久久| 亚洲欧美综合另类在线卡通| 亚洲人成电影网站色mp4| 1024亚洲合集| 亚洲一级二级三级| 三级欧美韩日大片在线看| 亚洲一线二线三线视频| 韩国一区二区在线观看| 国产成人精品三级麻豆| 色婷婷综合中文久久一本| 在线一区二区三区做爰视频网站| 欧美日韩aaaaaa| 精品美女在线播放| 欧美国产一区二区在线观看| 国产精品国产精品国产专区不蜜| 亚洲欧美日韩电影| 五月激情丁香一区二区三区| 捆绑紧缚一区二区三区视频| 国产精品一卡二卡| 欧美男人的天堂一二区| 国产亚洲一本大道中文在线| 综合中文字幕亚洲| 亚洲3atv精品一区二区三区| 免费精品视频最新在线| av电影在线不卡| 日韩一区二区精品葵司在线| 中文字幕制服丝袜成人av| 日本不卡一区二区三区高清视频| 国产精品99久久久久久似苏梦涵| 91黄色激情网站| 精品日韩99亚洲| 综合久久久久综合| 精东粉嫩av免费一区二区三区| va亚洲va日韩不卡在线观看| 日韩午夜在线观看| 国产精品国产三级国产aⅴ中文 | 4hu四虎永久在线影院成人| 久久久精品人体av艺术| 亚洲国产精品影院| 粉嫩一区二区三区性色av| 欧美日本在线一区| 国产精品灌醉下药二区| 亚洲精品国产一区二区精华液 | 日韩午夜激情电影| 亚洲欧洲国产专区| 国产综合久久久久久鬼色| 欧美一级专区免费大片| 亚洲另类在线一区| 99久久国产综合精品色伊| 2024国产精品| 激情五月播播久久久精品| 欧美三级午夜理伦三级中视频| 国产精品久久久久久久蜜臀 | 国产精品国产三级国产a| 国产一区二区三区不卡在线观看| 欧美日韩视频专区在线播放| 亚洲美女屁股眼交3| 国产不卡免费视频| 久久综合久久综合亚洲| 日日摸夜夜添夜夜添精品视频| 99精品黄色片免费大全| 日本一区二区免费在线观看视频 | 欧美人体做爰大胆视频| 久久久精品免费网站| 国产98色在线|日韩| 精品福利在线导航| 美女任你摸久久 | 4438x成人网最大色成网站| 一区二区三区免费网站| 97久久久精品综合88久久| 亚洲品质自拍视频网站| 99久久99久久综合| 亚洲欧美在线另类| 99re在线精品| 亚洲品质自拍视频| 日本国产一区二区| 亚洲成人第一页| 欧美日韩亚洲综合| 五月婷婷久久丁香| 欧美疯狂性受xxxxx喷水图片| 亚洲成人激情自拍| 欧美美女一区二区在线观看| 一区二区三区四区视频精品免费| 欧美视频日韩视频| 亚洲第一狼人社区| 9191久久久久久久久久久| 免费在线观看成人| 欧美大度的电影原声| 美女视频网站久久| 久久久91精品国产一区二区三区| 狠狠色丁香久久婷婷综| 久久久久97国产精华液好用吗| 成人一道本在线| 亚洲精品美国一|