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
182 quint64
bitTransform(
const int *array,
int len, quint64 source);
184 quint64
des64(quint64 *subkeys, quint64 data);
185 char*
encrypt(
char *src,
int length,
char *key);
193 const quint64 bts = source;
195 for(
int bti = 0; bti < len; ++bti)
197 if(array[bti] >= 0 && (bts & ARRAYMASK[array[bti]]) != 0)
199 dest |= ARRAYMASK[bti];
208 for(
int j = 0; j < 16; ++j)
210 const quint64 source = temp;
211 temp = ((source & ARRAYLSMASK[ARRAYLS[j]]) << (28 - ARRAYLS[j])) | ((source & ~ARRAYLSMASK[ARRAYLS[j]]) >> ARRAYLS[j]);
218 for(
int j = 0; j < 8; ++j)
230 quint64 l = 0, r = 0;
233 uchar *pR =
new uchar[8];
234 int *pSource =
new int[2];
235 pSource[0] = (
int) (out & quint64(0x00000000ffffffffl));
236 pSource[1] = (
int) ((out & quint64(0xffffffff00000000l)) >> 32);
238 for(
int i = 0; i < 16; ++i)
244 for(
int k = 0; k < 8; ++k)
246 pR[k] = (uchar) (0xff & (r >> (k * 8)));
250 for(
int sbi = 7; sbi >= 0; --sbi)
253 sOut |= MATRIXNSBOX[sbi][pR[sbi]];
259 pSource[0] = pSource[1];
260 pSource[1] = (
int) (l ^ r);
264 pSource[0] = pSource[1];
267 out = ((quint64) pSource[1] << 32 & quint64(0xffffffff00000000l)) | (quint64) (quint64(0x00000000ffffffffl) & pSource[0]);
278 for(
int i = 0; i < 8; ++i)
280 const quint64 temp = (quint64) key[i] << (i * 8);
284 const int num = length / 8;
286 quint64* subKey =
new quint64[16];
287 for(
int i = 0; i < 16; ++i)
293 quint64* pSrc = (quint64*)
malloc(num *
sizeof(quint64));
294 for(
int i = 0; i < num; ++i)
297 for(
int j = 0; j < 8; ++j)
299 pSrc[i] |= (quint64) src[i * 8 + j] << (j * 8);
303 quint64* pEncyrpt = (quint64*)
malloc((((num + 1) * 8 + 1) / 8) *
sizeof(quint64));
304 for(
int i = 0; i < num; ++i)
306 pEncyrpt[i] =
des64(subKey, pSrc[i]);
309 const int len = length;
310 const int tailNum = len % 8;
311 char* szTail = (
char*)
malloc(length - num * 8);
313 memcpy(szTail, src + num * 8, length - num * 8);
316 for(
int i = 0; i < tailNum; ++i)
318 tail64 = tail64 | (quint64(szTail[i])) << (i * 8);
321 pEncyrpt[num] =
des64(subKey, tail64);
322 char* result = (
char*)
malloc((num + 1) * 8);
325 for(
int i = 0; i < num + 1; ++i)
327 for(
int j = 0; j < 8; ++j)
329 result[temp] = (char) (0xff & (pEncyrpt[i] >> (j * 8)));
353 char *encData = d->encrypt((
char *)in.data(), in.length(), (
char *)key.data());
357 return QByteArray(str.data(), str.length());
365 char *encData = d->encrypt((
char *)str.data(), str.length(), (
char *)key.data());
367 QByteArray value(encData);
quint64 des64(quint64 *subkeys, quint64 data)
static constexpr int ARRAYPC_1[]
static constexpr int ARRAYP[]
static constexpr int ARRAYIP_1[]
QByteArray decrypt(const QByteArray &in, const QByteArray &key)
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[]
The namespace of the algorithm.
char * encrypt(char *src, int length, char *key)
The class of the des wrapper private.
The class of the des wrapper.
static constexpr wchar_t key[]
static constexpr quint64 ARRAYMASK[]
TTK_MODULE_EXPORT TTKString base64Decode(const TTKString &bytes)
static constexpr int ARRAYLS[]
static constexpr int ARRAYIP[]
TTK_MODULE_EXPORT TTKString base64Encode(const unsigned char *bytes, unsigned int len)
#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)
void desSubKeys(quint64 key, quint64 *K, Mode mode)