from
Crypto.Util.number
import
*
duibi
=
[
0xC2
,
0x3A
,
0x86
,
0xC1
,
0x44
,
0x07
,
0x13
,
0x0C
,
0x7B
,
0xBE
,
0x1A
,
0x6D
,
0xCB
,
0xFA
,
0x26
,
0x99
,
0x62
,
0x7C
,
0x82
,
0x66
,
0x9F
,
0x1C
,
0xD9
,
0x99
,
0x44
,
0xC3
,
0xB7
,
0x1D
,
0x67
,
0x3C
,
0x7B
,
0x80
]
table_index
=
[
0x00000000
,
0x00000001
,
0x00000002
,
0x00000003
,
0x00000004
,
0x00000005
,
0x00000006
,
0x00000007
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000003
,
0x00000004
,
0x00000005
,
0x00000006
,
0x00000007
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000003
,
0x00000004
,
0x00000005
,
0x00000006
,
0x00000007
,
0x00000007
,
0x00000006
,
0x00000005
,
0x00000004
,
0x00000003
,
0x00000002
,
0x00000001
,
0x00000000
]
data
=
[
0x31323334
,
0x35363738
,
0x31323334
,
0x35363738
,
0x31323334
,
0x35363738
,
0x31323334
,
0x35363738
]
table
=
[
0xDEADBEEF
,
0x9E3779B9
,
0xC6EF3720
,
0xBEEFDEED
,
0xDEADBEEF
,
0x9E3779B9
,
0xC6EF3720
,
0xBEEFDEED
]
table1
=
[
0x00000003
,
0x0000000F
,
0x0000000E
,
0x0000000A
,
0x00000004
,
0x00000007
,
0x00000000
,
0x00000009
,
0x00000001
,
0x0000000D
,
0x00000006
,
0x00000002
,
0x00000005
,
0x0000000C
,
0x0000000B
,
0x00000008
]
table2
=
[
0x00000003
,
0x0000000A
,
0x00000005
,
0x00000008
,
0x00000004
,
0x0000000B
,
0x0000000D
,
0x0000000C
,
0x00000007
,
0x00000006
,
0x00000000
,
0x00000001
,
0x00000002
,
0x00000009
,
0x0000000E
,
0x0000000F
]
table3
=
[
0x00000001
,
0x00000000
,
0x00000009
,
0x0000000B
,
0x0000000F
,
0x00000005
,
0x0000000C
,
0x00000004
,
0x0000000E
,
0x0000000D
,
0x0000000A
,
0x00000008
,
0x00000002
,
0x00000006
,
0x00000003
,
0x00000007
]
table4
=
[
0x0000000B
,
0x00000003
,
0x0000000E
,
0x00000005
,
0x00000006
,
0x00000009
,
0x00000001
,
0x00000007
,
0x00000000
,
0x0000000D
,
0x0000000C
,
0x00000004
,
0x00000008
,
0x00000002
,
0x0000000A
,
0x0000000F
]
table5
=
[
0x0000000D
,
0x00000008
,
0x00000009
,
0x00000005
,
0x00000001
,
0x00000004
,
0x00000002
,
0x00000000
,
0x00000006
,
0x0000000A
,
0x00000007
,
0x0000000B
,
0x0000000C
,
0x00000003
,
0x0000000E
,
0x0000000F
]
table6
=
[
0x0000000F
,
0x0000000C
,
0x0000000A
,
0x00000006
,
0x00000000
,
0x00000009
,
0x00000005
,
0x0000000E
,
0x00000002
,
0x0000000B
,
0x00000004
,
0x00000007
,
0x00000008
,
0x00000001
,
0x0000000D
,
0x00000003
]
table7
=
[
0x0000000D
,
0x00000002
,
0x00000009
,
0x00000000
,
0x0000000F
,
0x00000003
,
0x0000000A
,
0x0000000B
,
0x00000004
,
0x00000005
,
0x00000006
,
0x0000000E
,
0x00000007
,
0x0000000C
,
0x00000001
,
0x00000008
]
table8
=
[
0x00000004
,
0x0000000E
,
0x00000000
,
0x0000000F
,
0x00000009
,
0x00000003
,
0x00000002
,
0x0000000D
,
0x00000005
,
0x00000001
,
0x0000000C
,
0x00000008
,
0x00000007
,
0x0000000A
,
0x0000000B
,
0x00000006
]
table_list
=
[table1,table2,table3,table4,table5,table6,table7,table8]
def
encode1(data,i1,i2,count1):
count
=
0
temp
=
data[i1]
data[i1] ^
=
data[i2]
data[i1] ^
=
table[count1]
idx1
=
data[i1] >>
0x1c
idx2
=
(data[i1] >>
0x18
) &
0xf
idx3
=
(data[i1] >>
0x14
) &
0xf
idx4
=
(data[i1] >>
0x10
) &
0xf
idx5
=
(data[i1] >>
0xc
) &
0xf
idx6
=
(data[i1] >>
0x8
) &
0xf
idx7
=
(data[i1] >>
4
) &
0xf
idx8
=
(data[i1]) &
0xf
idx_list
=
[table1[idx1],table2[idx2],table3[idx3],table4[idx4],table5[idx5],table6[idx6],table7[idx7],table8[idx8]]
for
j
in
idx_list:
count <<
=
4
count
+
=
j
data[i2]
=
temp
data[i1]
=
count
def
decode1(data,i1,i2,count1):
data_list
=
[]
for
i
in
range
(
8
):
data_list.append(data[i1]&
0xf
)
data[i1] >>
=
4
data_list
=
data_list[::
-
1
]
count
=
0
for
i,j
in
enumerate
(table_list):
index_data
=
j.index(data_list[i])
count <<
=
4
count
+
=
index_data
count ^
=
table[count1]
count ^
=
data[i2]
data[i1]
=
data[i2]
data[i2]
=
count
def
encode2(data_cur,magic):
while
data_cur:
t1
=
data_cur ^ magic
data_cur &
=
magic
data_cur
*
=
2
magic
=
t1
return
magic&
0xff
for
m
in
range
(
256
):
data
=
[
0xC2
,
0x3A
,
0x86
,
0xC1
,
0x44
,
0x07
,
0x13
,
0x0C
,
0x7B
,
0xBE
,
0x1A
,
0x6D
,
0xCB
,
0xFA
,
0x26
,
0x99
,
0x62
,
0x7C
,
0x82
,
0x66
,
0x9F
,
0x1C
,
0xD9
,
0x99
,
0x44
,
0xC3
,
0xB7
,
0x1D
,
0x67
,
0x3C
,
0x7B
,
0x80
]
magic
=
m
for
i
in
range
(
63
,
-
1
,
-
1
):
data[i &
0x1f
]
=
~(data[i &
0x1f
] ^ magic) ^ data[(i
+
1
) &
0x1f
]
magic
=
(magic ^
0xa5
)
-
data[(i
-
1
) &
0x1f
]
magic &
=
0xff
input_data
=
[]
for
i
in
range
(
len
(data)
/
/
4
):
input_data.append((data[i
*
4
]&
0xff
)|((data[i
*
4
+
1
]&
0xff
)<<
8
) | ((data[i
*
4
+
2
]&
0xff
)<<
16
) | ((data[i
*
4
+
3
]&
0xff
) <<
24
))
input_data[
1
+
4
], input_data[
3
+
4
]
=
input_data[
3
+
4
], input_data[
1
+
4
]
for
i
in
range
(
32
):
decode1(input_data,
1
+
4
,
3
+
4
, table_index[i])
input_data[
0
+
4
], input_data[
2
+
4
]
=
input_data[
2
+
4
], input_data[
0
+
4
]
for
i
in
range
(
32
):
decode1(input_data,
0
+
4
,
2
+
4
, table_index[i])
input_data[
1
], input_data[
2
]
=
input_data[
2
], input_data[
1
]
for
i
in
range
(
32
):
decode1(input_data,
1
,
2
, table_index[i])
input_data[
0
], input_data[
3
]
=
input_data[
3
], input_data[
0
]
for
i
in
range
(
32
):
decode1(input_data,
0
,
3
, table_index[i])
for
i
in
input_data:
print
(long_to_bytes(i),end
=
"")
print
()
s
=
[b
'rh3S'
,b
'nid0'
,b
'_re7'
,b
'nU_3'
,b
're4i'
,b
'_la3'
,b
'r00D'
,b
'111s'
]
for
i
in
s:
print
(i.decode()[::
-
1
],end
=
"")