📄 serpent.java
字号:
x3 <<= 7; x0 ^= x4; x2 ^= x3; x0 ^= x1; x4 = (x4 >>> 7) | (x4 << 25); x1 = (x1 >>> 1) | (x1 << 31); x1 ^= x0; x3 = x0 << 3; x4 ^= x3; x0 = (x0 >>> 13) | (x0 << 19); x1 ^= x2; x4 ^= x2; x2 = (x2 >>> 3) | (x2 << 29); x1 = ~x1; x3 = x4; x2 ^= x1; x4 |= x0; x4 ^= x2; x2 |= x1; x2 &= x0; x3 ^= x4; x2 ^= x3; x3 |= x0; x3 ^= x1; x1 &= x2; x1 ^= x4; x3 ^= x2; x4 &= x3; x3 ^= x1; x4 ^= x0; x4 ^= x3; x3 = ~x3; } private void sboxI4() { x4 = (x4 >>> 22) | (x4 << 10); x1 = (x1 >>> 5) | (x1 << 27); x0 = x3; x4 ^= x2; x0 <<= 7; x1 ^= x2; x4 ^= x0; x1 ^= x3; x2 = (x2 >>> 7) | (x2 << 25); x3 = (x3 >>> 1) | (x3 << 31); x3 ^= x1; x0 = x1 << 3; x2 ^= x0; x1 = (x1 >>> 13) | (x1 << 19); x3 ^= x4; x2 ^= x4; x4 = (x4 >>> 3) | (x4 << 29); x0 = x4; x4 &= x2; x4 ^= x3; x3 |= x2; x3 &= x1; x0 ^= x4; x0 ^= x3; x3 &= x4; x1 = ~x1; x2 ^= x0; x3 ^= x2; x2 &= x1; x2 ^= x4; x1 ^= x3; x4 &= x1; x2 ^= x1; x4 ^= x0; x4 |= x2; x2 ^= x1; x4 ^= x3; } private void sboxI3() { x4 = (x4 >>> 22) | (x4 << 10); x1 = (x1 >>> 5) | (x1 << 27); x3 = x2; x4 ^= x0; x3 <<= 7; x1 ^= x0; x4 ^= x3; x1 ^= x2; x0 = (x0 >>> 7) | (x0 << 25); x2 = (x2 >>> 1) | (x2 << 31); x2 ^= x1; x3 = x1 << 3; x0 ^= x3; x1 = (x1 >>> 13) | (x1 << 19); x2 ^= x4; x0 ^= x4; x4 = (x4 >>> 3) | (x4 << 29); x3 = x4; x4 ^= x2; x2 &= x4; x2 ^= x1; x1 &= x3; x3 ^= x0; x0 |= x2; x0 ^= x4; x1 ^= x3; x4 ^= x1; x1 |= x0; x1 ^= x2; x3 ^= x4; x4 &= x0; x2 |= x0; x2 ^= x4; x3 ^= x1; x4 ^= x3; } private void sboxI2() { x4 = (x4 >>> 22) | (x4 << 10); x0 = (x0 >>> 5) | (x0 << 27); x3 = x1; x4 ^= x2; x3 <<= 7; x0 ^= x2; x4 ^= x3; x0 ^= x1; x2 = (x2 >>> 7) | (x2 << 25); x1 = (x1 >>> 1) | (x1 << 31); x1 ^= x0; x3 = x0 << 3; x2 ^= x3; x0 = (x0 >>> 13) | (x0 << 19); x1 ^= x4; x2 ^= x4; x4 = (x4 >>> 3) | (x4 << 29); x4 ^= x2; x2 ^= x0; x3 = x2; x2 &= x4; x2 ^= x1; x1 |= x4; x1 ^= x3; x3 &= x2; x4 ^= x2; x3 &= x0; x3 ^= x4; x4 &= x1; x4 |= x0; x2 = ~x2; x4 ^= x2; x0 ^= x2; x0 &= x1; x2 ^= x3; x2 ^= x0; } private void sboxI1() { x4 = (x4 >>> 22) | (x4 << 10); x1 = (x1 >>> 5) | (x1 << 27); x0 = x3; x4 ^= x2; x0 <<= 7; x1 ^= x2; x4 ^= x0; x1 ^= x3; x2 = (x2 >>> 7) | (x2 << 25); x3 = (x3 >>> 1) | (x3 << 31); x3 ^= x1; x0 = x1 << 3; x2 ^= x0; x1 = (x1 >>> 13) | (x1 << 19); x3 ^= x4; x2 ^= x4; x4 = (x4 >>> 3) | (x4 << 29); x0 = x3; x3 ^= x2; x2 &= x3; x0 ^= x4; x2 ^= x1; x1 |= x3; x4 ^= x2; x1 ^= x0; x1 |= x4; x3 ^= x2; x1 ^= x3; x3 |= x2; x3 ^= x1; x0 = ~x0; x0 ^= x3; x3 |= x1; x3 ^= x1; x3 |= x0; x2 ^= x3; } private void sboxI0() { x2 = (x2 >>> 22) | (x2 << 10); x0 = (x0 >>> 5) | (x0 << 27); x3 = x1; x2 ^= x4; x3 <<= 7; x0 ^= x4; x2 ^= x3; x0 ^= x1; x4 = (x4 >>> 7) | (x4 << 25); x1 = (x1 >>> 1) | (x1 << 31); x1 ^= x0; x3 = x0 << 3; x4 ^= x3; x0 = (x0 >>> 13) | (x0 << 19); x1 ^= x2; x4 ^= x2; x2 = (x2 >>> 3) | (x2 << 29); x2 = ~x2; x3 = x1; x1 |= x0; x3 = ~x3; x1 ^= x2; x2 |= x3; x1 ^= x4; x0 ^= x3; x2 ^= x0; x0 &= x4; x3 ^= x0; x0 |= x1; x0 ^= x2; x4 ^= x3; x2 ^= x1; x4 ^= x0; x4 ^= x1; x2 &= x4; x3 ^= x2; } private void sboxI7() { x1 = (x1 >>> 22) | (x1 << 10); x0 = (x0 >>> 5) | (x0 << 27); x2 = x3; x1 ^= x4; x2 <<= 7; x0 ^= x4; x1 ^= x2; x0 ^= x3; x4 = (x4 >>> 7) | (x4 << 25); x3 = (x3 >>> 1) | (x3 << 31); x3 ^= x0; x2 = x0 << 3; x4 ^= x2; x0 = (x0 >>> 13) | (x0 << 19); x3 ^= x1; x4 ^= x1; x1 = (x1 >>> 3) | (x1 << 29); x2 = x1; x1 ^= x0; x0 &= x4; x1 = ~x1; x2 |= x4; x4 ^= x3; x3 |= x0; x0 ^= x1; x1 &= x2; x3 ^= x1; x1 ^= x0; x0 |= x1; x4 &= x2; x0 ^= x4; x2 ^= x3; x4 ^= x2; x2 |= x0; x4 ^= x1; x2 ^= x1; } // These S-Box functions are used in the key setup. /** S-Box 0. */ private void sbox0(int r0, int r1, int r2, int r3) { int r4 = r1 ^ r2; r3 ^= r0; r1 = r1 & r3 ^ r0; r0 = (r0 | r3) ^ r4; r4 ^= r3; r3 ^= r2; r2 = (r2 | r1) ^ r4; r4 = ~r4 | r1; r1 ^= r3 ^ r4; r3 |= r0; x0 = r1 ^ r3; x1 = r4 ^ r3; x2 = r2; x3 = r0; } /** S-Box 1. */ private void sbox1(int r0, int r1, int r2, int r3) { r0 = ~r0; int r4 = r0; r2 = ~r2; r0 &= r1; r2 ^= r0; r0 |= r3; r3 ^= r2; r1 ^= r0; r0 ^= r4; r4 |= r1; r1 ^= r3; r2 = (r2 | r0) & r4; r0 ^= r1; x0 = r2; x1 = r0 & r2 ^ r4; x2 = r3; x3 = r1 & r2 ^ r0; } /** S-Box 2. */ private void sbox2(int r0, int r1, int r2, int r3) { int r4 = r0; r0 = r0 & r2 ^ r3; r2 = r2 ^ r1 ^ r0; r3 = (r3 | r4) ^ r1; r4 ^= r2; r1 = r3; r3 = (r3 | r4) ^ r0; r0 &= r1; r4 ^= r0; x0 = r2; x1 = r3; x2 = r1 ^ r3 ^ r4; x3 = ~r4; } /** S-Box 3. */ private void sbox3(int r0, int r1, int r2, int r3) { int r4 = r0; r0 |= r3; r3 ^= r1; r1 &= r4; r4 = r4 ^ r2 | r1; r2 ^= r3; r3 = r3 & r0 ^ r4; r0 ^= r1; r4 = r4 & r0 ^ r2; r1 = (r1 ^ r3 | r0) ^ r2; r0 ^= r3; x0 = (r1 | r3) ^ r0; x1 = r1; x2 = r3; x3 = r4; } /** S-Box 4. */ private void sbox4(int r0, int r1, int r2, int r3) { r1 ^= r3; int r4 = r1; r3 = ~r3; r2 ^= r3; r3 ^= r0; r1 = r1 & r3 ^ r2; r4 ^= r3; r0 ^= r4; r2 = r2 & r4 ^ r0; r0 &= r1; r3 ^= r0; r4 = (r4 | r1) ^ r0; x0 = r1; x1 = r4 ^ (r2 & r3); x2 = ~((r0 | r3) ^ r2); x3 = r3; } /** S-Box 5. */ private void sbox5(int r0, int r1, int r2, int r3) { r0 ^= r1; r1 ^= r3; int r4 = r1; r3 = ~r3; r1 &= r0; r2 ^= r3; r1 ^= r2; r2 |= r4; r4 ^= r3; r3 = r3 & r1 ^ r0; r4 = r4 ^ r1 ^ r2; x0 = r1; x1 = r3; x2 = r0 & r3 ^ r4; x3 = ~(r2 ^ r0) ^ (r4 | r3); } /** S-Box 6. */ private void sbox6(int r0, int r1, int r2, int r3) { int r4 = r3; r2 = ~r2; r3 = r3 & r0 ^ r2; r0 ^= r4; r2 = (r2 | r4) ^ r0; r1 ^= r3; r0 |= r1; r2 ^= r1; r4 ^= r0; r0 = (r0 | r3) ^ r2; r4 = r4 ^ r3 ^ r0; x0 = r0; x1 = r1; x2 = r4; x3 = r2 & r4 ^ ~r3; } /** S-Box 7. */ private void sbox7(int r0, int r1, int r2, int r3) { int r4 = r1; r1 = (r1 | r2) ^ r3; r4 ^= r2; r2 ^= r1; r3 = (r3 | r4) & r0; r4 ^= r2; r3 ^= r1; r1 = (r1 | r4) ^ r0; r0 = (r0 | r4) ^ r2; r1 ^= r4; r2 ^= r1; x0 = r4 ^ (~r2 | r0); x1 = r3; x2 = r1 & r0 ^ r4; x3 = r0; } // Inner classes. // ----------------------------------------------------------------------- private class Key implements Cloneable { // Constants and variables. // -------------------------------------------------------------------- int k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k120, k121, k122, k123, k124, k125, k126, k127, k128, k129, k130, k131; // Constructors. // -------------------------------------------------------------------- /** Trivial 0-arguments constructor. */ Key() { } /** Cloning constructor. */ private Key(Key that) { this.k0 = that.k0; this.k1 = that.k1; this.k2 = that.k2; this.k3 = that.k3; this.k4 = that.k4; this.k5 = that.k5; this.k6 = that.k6; this.k7 = that.k7; this.k8 = that.k8; this.k9 = that.k9; this.k10 = that.k10; this.k11 = that.k11; this.k12 = that.k12; this.k13 = that.k13; this.k14 = that.k14; this.k15 = that.k15; this.k16 = that.k16; this.k17 = that.k17; this.k18 = that.k18; this.k19 = that.k19; this.k20 = that.k20; this.k21 = that.k21; this.k22 = that.k22; this.k23 = that.k23; this.k24 = that.k24; this.k25 = that.k25; this.k26 = that.k26; this.k27 = that.k27; this.k28 = that.k28; this.k29 = that.k29; this.k30 = that.k30; this.k31 = that.k31; this.k32 = that.k32; this.k33 = that.k33; this.k34 = that.k34; this.k35 = that.k35; this.k36 = that.k36; this.k37 = that.k37; this.k38 = that.k38; this.k39 = that.k39; this.k40 = that.k40; this.k41 = that.k41; this.k42 = that.k42; this.k43 = that.k43; this.k44 = that.k44; this.k45 = that.k45; this.k46 = that.k46; this.k47 = that.k47; this.k48 = that.k48; this.k49 = that.k49; this.k50 = that.k50; this.k51 = that.k51; this.k52 = that.k52; this.k53 = that.k53; this.k54 = that.k54; this.k55 = that.k55; this.k56 = that.k56; this.k57 = that.k57; this.k58 = that.k58; this.k59 = that.k59; this.k60 = that.k60; this.k61 = that.k61; this.k62 = that.k62; this.k63 = that.k63; this.k64 = that.k64; this.k65 = that.k65; this.k66 = that.k66; this.k67 = that.k67; this.k68 = that.k68; this.k69 = that.k69; this.k70 = that.k70; this.k71 = that.k71; this.k72 = that.k72; this.k73 = that.k73; this.k74 = that.k74; this.k75 = that.k75; this.k76 = that.k76; this.k77 = that.k77; this.k78 = that.k78; this.k79 = that.k79; this.k80 = that.k80; this.k81 = that.k81; this.k82 = that.k82; this.k83 = that.k83; this.k84 = that.k84; this.k85 = that.k85; this.k86 = that.k86; this.k87 = that.k87; this.k88 = that.k88; this.k89 = that.k89; this.k90 = that.k90; this.k91 = that.k91; this.k92 = that.k92; this.k93 = that.k93; this.k94 = that.k94; this.k95 = that.k95; this.k96 = that.k96; this.k97 = that.k97; this.k98 = that.k98; this.k99 = that.k99; this.k100 = that.k100; this.k101 = that.k101; this.k102 = that.k102; this.k103 = that.k103; this.k104 = that.k104; this.k105 = that.k105; this.k106 = that.k106; this.k107 = that.k107; this.k108 = that.k108; this.k109 = that.k109; this.k110 = that.k110; this.k111 = that.k111; this.k112 = that.k112; this.k113 = that.k113; this.k114 = that.k114; this.k115 = that.k115; this.k116 = that.k116; this.k117 = that.k117; this.k118 = that.k118; this.k119 = that.k119; this.k120 = that.k120; this.k121 = that.k121; this.k122 = that.k122; this.k123 = that.k123; this.k124 = that.k124; this.k125 = that.k125; this.k126 = that.k126; this.k127 = that.k127; this.k128 = that.k128; this.k129 = that.k129; this.k130 = that.k130; this.k131 = that.k131; } // Cloneable interface implementation. // -------------------------------------------------------------------- public Object clone() { return new Key(this); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -