7 0x0000000000000001l, 0x0000000000000002l, 0x0000000000000004l, 0x0000000000000008l,
8 0x0000000000000010l, 0x0000000000000020l, 0x0000000000000040l, 0x0000000000000080l,
9 0x0000000000000100l, 0x0000000000000200l, 0x0000000000000400l, 0x0000000000000800l,
10 0x0000000000001000l, 0x0000000000002000l, 0x0000000000004000l, 0x0000000000008000l,
11 0x0000000000010000l, 0x0000000000020000l, 0x0000000000040000l, 0x0000000000080000l,
12 0x0000000000100000l, 0x0000000000200000l, 0x0000000000400000l, 0x0000000000800000l,
13 0x0000000001000000l, 0x0000000002000000l, 0x0000000004000000l, 0x0000000008000000l,
14 0x0000000010000000l, 0x0000000020000000l, 0x0000000040000000l, 0x0000000080000000l,
15 0x0000000100000000l, 0x0000000200000000l, 0x0000000400000000l, 0x0000000800000000l,
16 0x0000001000000000l, 0x0000002000000000l, 0x0000004000000000l, 0x0000008000000000l,
17 0x0000010000000000l, 0x0000020000000000l, 0x0000040000000000l, 0x0000080000000000l,
18 0x0000100000000000l, 0x0000200000000000l, 0x0000400000000000l, 0x0000800000000000l,
19 0x0001000000000000l, 0x0002000000000000l, 0x0004000000000000l, 0x0008000000000000l,
20 0x0010000000000000l, 0x0020000000000000l, 0x0040000000000000l, 0x0080000000000000l,
21 0x0100000000000000l, 0x0200000000000000l, 0x0400000000000000l, 0x0800000000000000l,
22 0x1000000000000000l, 0x2000000000000000l, 0x4000000000000000l, 0x8000000000000000l
26 57, 49, 41, 33, 25, 17, 9, 1,
27 59, 51, 43, 35, 27, 19, 11, 3,
28 61, 53, 45, 37, 29, 21, 13, 5,
29 63, 55, 47, 39, 31, 23, 15, 7,
30 56, 48, 40, 32, 24, 16, 8, 0,
31 58, 50, 42, 34, 26, 18, 10, 2,
32 60, 52, 44, 36, 28, 20, 12, 4,
33 62, 54, 46, 38, 30, 22, 14, 6
37 31, 0, 1, 2, 3, 4, -1, -1,
38 3, 4, 5, 6, 7, 8, -1, -1,
39 7, 8, 9, 10, 11, 12, -1, -1,
40 11, 12, 13, 14, 15, 16, -1, -1,
41 15, 16, 17, 18, 19, 20, -1, -1,
42 19, 20, 21, 22, 23, 24, -1, -1,
43 23, 24, 25, 26, 27, 28, -1, -1,
44 27, 28, 29, 30, 31, 30, -1, -1
48 { 14, 4, 3, 15, 2, 13, 5, 3,
49 13, 14, 6, 9, 11, 2, 0, 5,
50 4, 1, 10, 12, 15, 6, 9, 10,
51 1, 8, 12, 7, 8, 11, 7, 0,
52 0, 15, 10, 5, 14, 4, 9, 10,
53 7, 8, 12, 3, 13, 1, 3, 6,
54 15, 12, 6, 11, 2, 9, 5, 0,
55 4, 2, 11, 14, 1, 7, 8, 13
57 { 15, 0, 9, 5, 6, 10, 12, 9,
58 8, 7, 2, 12, 3, 13, 5, 2,
59 1, 14, 7, 8, 11, 4, 0, 3,
60 14, 11, 13, 6, 4, 1, 10, 15,
61 3, 13, 12, 11, 15, 3, 6, 0,
62 4, 10, 1, 7, 8, 4, 11, 14,
63 13, 8, 0, 6, 2, 15, 9, 5,
64 7, 1, 10, 12, 14, 2, 5, 9
66 { 10, 13, 1, 11, 6, 8, 11, 5,
67 9, 4, 12, 2, 15, 3, 2, 14,
68 0, 6, 13, 1, 3, 15, 4, 10,
69 14, 9, 7, 12, 5, 0, 8, 7,
70 13, 1, 2, 4, 3, 6, 12, 11,
71 0, 13, 5, 14, 6, 8, 15, 2,
72 7, 10, 8, 15, 4, 9, 11, 5,
73 9, 0, 14, 3, 10, 7, 1, 12
75 { 7, 10, 1, 15, 0, 12, 11, 5,
76 14, 9, 8, 3, 9, 7, 4, 8,
77 13, 6, 2, 1, 6, 11, 12, 2,
78 3, 0, 5, 14, 10, 13, 15, 4,
79 13, 3, 4, 9, 6, 10, 1, 12,
80 11, 0, 2, 5, 0, 13, 14, 2,
81 8, 15, 7, 4, 15, 1, 10, 7,
82 5, 6, 12, 11, 3, 8, 9, 14
84 { 2, 4, 8, 15, 7, 10, 13, 6,
85 4, 1, 3, 12, 11, 7, 14, 0,
86 12, 2, 5, 9, 10, 13, 0, 3,
87 1, 11, 15, 5, 6, 8, 9, 14,
88 14, 11, 5, 6, 4, 1, 3, 10,
89 2, 12, 15, 0, 13, 2, 8, 5,
90 11, 8, 0, 15, 7, 14, 9, 4,
91 12, 7, 10, 9, 1, 13, 6, 3
93 { 12, 9, 0, 7, 9, 2, 14, 1,
94 10, 15, 3, 4, 6, 12, 5, 11,
95 1, 14, 13, 0, 2, 8, 7, 13,
96 15, 5, 4, 10, 8, 3, 11, 6,
97 10, 4, 6, 11, 7, 9, 0, 6,
98 4, 2, 13, 1, 9, 15, 3, 8,
99 15, 3, 1, 14, 12, 5, 11, 0,
100 2, 12, 14, 7, 5, 10, 8, 13
102 { 4, 1, 3, 10, 15, 12, 5, 0,
103 2, 11, 9, 6, 8, 7, 6, 9,
104 11, 4, 12, 15, 0, 3, 10, 5,
105 14, 13, 7, 8, 13, 14, 1, 2,
106 13, 6, 14, 9, 4, 1, 2, 14,
107 11, 13, 5, 0, 1, 10, 8, 3,
108 0, 11, 3, 5, 9, 4, 15, 2,
109 7, 8, 12, 15, 10, 7, 6, 12
111 { 13, 7, 10, 0, 6, 9, 5, 15,
112 8, 4, 3, 10, 11, 14, 12, 5,
113 2, 11, 9, 6, 15, 12, 0, 3,
114 4, 1, 14, 13, 1, 2, 7, 8,
115 1, 2, 12, 15, 10, 4, 0, 3,
116 13, 14, 6, 9, 7, 8, 9, 6,
117 15, 1, 5, 12, 3, 10, 14, 5,
118 8, 7, 11, 0, 4, 13, 2, 11
123 15, 6, 19, 20, 28, 11, 27, 16,
124 0, 14, 22, 25, 4, 17, 30, 9,
125 1, 7, 23, 13, 31, 26, 2, 8,
126 18, 12, 29, 5, 21, 10, 3, 24
130 39, 7, 47, 15, 55, 23, 63, 31,
131 38, 6, 46, 14, 54, 22, 62, 30,
132 37, 5, 45, 13, 53, 21, 61, 29,
133 36, 4, 44, 12, 52, 20, 60, 28,
134 35, 3, 43, 11, 51, 19, 59, 27,
135 34, 2, 42, 10, 50, 18, 58, 26,
136 33, 1, 41, 9, 49, 17, 57, 25,
137 32, 0, 40, 8, 48, 16, 56, 24
141 56, 48, 40, 32, 24, 16, 8, 0,
142 57, 49, 41, 33, 25, 17, 9, 1,
143 58, 50, 42, 34, 26, 18, 10, 2,
144 59, 51, 43, 35, 62, 54, 46, 38,
145 30, 22, 14, 6, 61, 53, 45, 37,
146 29, 21, 13, 5, 60, 52, 44, 36,
147 28, 20, 12, 4, 27, 19, 11, 3
151 13, 16, 10, 23, 0, 4, -1, -1,
152 2, 27, 14, 5, 20, 9, -1, -1,
153 22, 18, 11, 3, 25, 7, -1, -1,
154 15, 6, 26, 19, 12, 1, -1, -1,
155 40, 51, 30, 36, 46, 54, -1, -1,
156 29, 39, 50, 44, 32, 47, -1, -1,
157 43, 48, 38, 55, 33, 52, -1, -1,
158 45, 41, 49, 35, 28, 31, -1, -1
162 1, 1, 2, 2, 2, 2, 2, 2,
163 1, 2, 2, 2, 2, 2, 2, 1
167 0x0000000000000000l, 0x0000000000100001l, 0x0000000000300003l
176 quint64
bitTransform(
const int *array,
int len, quint64 source);
178 quint64
des64(quint64 *subkeys, quint64 data);
179 char*
encrypt(
char *src,
int length,
char *key);
187 const quint64 bts = source;
189 for(
int bti = 0; bti < len; ++bti)
191 if(array[bti] >= 0 && (bts & ARRAYMASK[array[bti]]) != 0)
193 dest |= ARRAYMASK[bti];
202 for(
int j = 0; j < 16; ++j)
204 const quint64 source = temp;
205 temp = ((source & ARRAYLSMASK[ARRAYLS[j]]) << (28 - ARRAYLS[j])) | ((source & ~ARRAYLSMASK[ARRAYLS[j]]) >> ARRAYLS[j]);
212 for(
int j = 0; j < 8; ++j)
224 quint64 l = 0, r = 0;
227 uchar *pR =
new uchar[8];
228 int *pSource =
new int[2];
229 pSource[0] = (
int) (out & quint64(0x00000000ffffffffl));
230 pSource[1] = (
int) ((out & quint64(0xffffffff00000000l)) >> 32);
232 for(
int i = 0; i < 16; ++i)
238 for(
int k = 0; k < 8; ++k)
240 pR[k] = (uchar) (0xff & (r >> (k * 8)));
244 for(
int sbi = 7; sbi >= 0; --sbi)
247 sOut |= MATRIXNSBOX[sbi][pR[sbi]];
253 pSource[0] = pSource[1];
254 pSource[1] = (
int) (l ^ r);
258 pSource[0] = pSource[1];
261 out = ((quint64) pSource[1] << 32 & quint64(0xffffffff00000000l)) | (quint64) (quint64(0x00000000ffffffffl) & pSource[0]);
273 for(
int i = 0; i < 8; ++i)
275 const quint64 temp = (quint64) key[i] << (i * 8);
279 const int num = length / 8;
281 quint64* subKey =
new quint64[16];
282 for(
int i = 0; i < 16; ++i)
288 quint64* pSrc = (quint64*)
malloc(num *
sizeof(quint64));
289 for(
int i = 0; i < num; ++i)
292 for(
int j = 0; j < 8; ++j)
294 pSrc[i] |= (quint64) src[i * 8 + j] << (j * 8);
298 quint64* pEncyrpt = (quint64*)
malloc((((num + 1) * 8 + 1) / 8) *
sizeof(quint64));
299 for(
int i = 0; i < num; ++i)
301 pEncyrpt[i] =
des64(subKey, pSrc[i]);
304 const int len = length;
305 const int tailNum = len % 8;
306 char* szTail = (
char*)
malloc(length - num * 8);
308 memcpy(szTail, src + num * 8, length - num * 8);
311 for(
int i = 0; i < tailNum; ++i)
313 tail64 = tail64 | (quint64(szTail[i])) << (i * 8);
316 pEncyrpt[num] =
des64(subKey, tail64);
317 char* result = (
char*)
malloc((num + 1) * 8);
320 for(
int i = 0; i < num + 1; ++i)
322 for(
int j = 0; j < 8; ++j)
324 result[temp] = (char) (0xff & (pEncyrpt[i] >> (j * 8)));
348 char *encData = d->encrypt((
char *)in.data(), in.length(), (
char *)key.data());
352 return QByteArray(str.data(), str.length());
360 char *encData = d->encrypt((
char *)str.data(), str.length(), (
char *)key.data());
362 QByteArray value(encData);
quint64 des64(quint64 *subkeys, quint64 data)
static constexpr int ARRAYPC_1[]
static constexpr int ARRAYP[]
static constexpr int ARRAYIP_1[]
static constexpr wchar_t key[]
QByteArray decrypt(const QByteArray &in, const QByteArray &key)
void desSubKeys(quint64 key, quint64 *K, Des::Mode mode)
static constexpr int ARRAYE[]
static constexpr char MATRIXNSBOX[8][64]
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
QByteArray encrypt(const QByteArray &in, const QByteArray &key)
static constexpr int ARRAYPC_2[]
TTKString base64Decode(const TTKString &bytes)
The namespace of the algorithm.
TTKString base64Encode(const unsigned char *bytes, unsigned int len)
char * encrypt(char *src, int length, char *key)
The class of the des wrapper private.
The class of the des wrapper.
static constexpr quint64 ARRAYMASK[]
static constexpr int ARRAYLS[]
static constexpr int ARRAYIP[]
#define TTK_INIT_PRIVATE(Class)
The class of the ttk private base.
static constexpr quint64 ARRAYLSMASK[]
quint64 bitTransform(const int *array, int len, quint64 source)